【问题标题】:deserialise the list of integer from json to java using Jackson Object Mapper使用 Jackson Objectmapper 将整数列表从 json 反序列化为 java
【发布时间】:2018-07-24 11:51:51
【问题描述】:

我的 json 响应如下:

{"IsValid":false,"ModelErrors":null,"ValidationErrors":[10000]}

模型类:

public class ShipmentResponse {
    private boolean isValid;
    private ModelErrors modelErrors;
    private List<Integer> validationErrors = null;

对象映射器代码:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
ShipmentResponse shipmentResponse =  mapper.readValue((BufferedInputStream)response.getEntity(), ShipmentResponse.class);

我无法将 validationErrors 从 json 映射到 java,即解析后validationErrors = null。我期待validationErrors = {1000} 但不知道为什么?我知道我们可以使用 TypeReference 来返回数组或列表,但不能嵌套在数据对象中。

【问题讨论】:

  • 你是什么意思不能?发生了什么?
  • 你的 setter 和 getter 叫什么名字?您是否使用 @JsonProperty 注释它们以匹配 JSON 中字段的大写名称?
  • 你为什么禁用FAIL_ON_UNKNOWN_PROPERTIES
  • @SotiriosDelimanolis :我尝试了 JsonProperty 注释,仍然没有运气。我没有 setter,但很快会更新问题中的 getter。
  • @shmosel 只要它有一个属性描述符(get 或 set),它就会注册一个属性。该属性可以通过可用的设置器或适当命名的字段进行设置。

标签: java rest jackson jackson-databind


【解决方案1】:

试试这个

    public class ShipmentResponse {

        @JsonProperty("IsValid")
        private boolean isValid;
        @JsonProperty("ModelErrors")
        private ModelErrors modelErrors;
        @JsonProperty("ValidationErrors")
        private List<Integer> validationErrors = null;
}

通常,您的属性名称和实际 json 不匹配(大小写很重要)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多