1

我有两个用于将 jason 单独解析为 java 的 java 类。除此之外,这些类不用于任何事情。下面是两个类。

import java.util.ArrayList;

public class PaymentsPaid {

    public ArrayList<PaidDetailAmounts> amount;
}

public class PaidDetailAmounts {

    public Long invoiceFeeId;

    public Double amountPaid;
}

这里是字符串和对象映射器的使用。

 "amount": [{"invoiceFeeId": 12085, "amountPaid": 100},{"invoiceFeeId": 12084, "amountPaid": 100},{"invoiceFeeId": 12086, "amountPaid": 500}]

和映射器代码

ObjectMapper mapper = new ObjectMapper();        
try {
    PaymentsPaid paymentsPaidModel = mapper.readValue(httpServletRequest.getParameter("amount"), PaymentsPaid.class);
   /*
    Iterator<PaidDetailAmounts> iterator = paymentsPaidModel.amount.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next().invoiceFeeId);
    }
    */
} catch (JsonParseException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

这是我的例外:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“invoiceFeeId”(类 PACKAGE_NAME.PaymentsPaid),未标记为可忽略

我一定是在做一些破旧的事情,因为我使用这种方法构建了一个搜索功能,它目前在我的应用程序中并且运行良好。请指教。我认为它可能是一个格式错误的 json 字符串,因为它应该是一个数组。

4

1 回答 1

1

问题接缝是杰克逊试图访问invoiceFeeId类的领域PaymentsPaid,但它是一个类的领域PaidDetailAmounts

我认为您的 Json 字符串中缺少一些括号:

{  // <-- missing?
  "amount": [{"invoiceFeeId":...}]
}  // <-- missing?

但我不是 JSON 专家,所以我会尝试编写一个简单的测试用例,从一些 Java 对象创建一个 JSON 字符串,然后将这些字符串解析回 Java 对象。这样测试就可以断言两个(组)对象是相等的。

然后您可以使用测试创建的 JSON 字符串并将其与您的输入进行比较,我希望(缺少的)括号是它们之间的区别。

于 2012-11-09T07:51:44.377 回答