杰克逊与JSON:无法识别的字段,未标记为可忽略

我需要将某个JSON字符串转换为Java对象。 我使用Jackson进行JSON处理。 我无法控制输入的JSON(我从Web服务中读取)。 这是我的输入JSON:

{"wrapper":[{"id":"13","name":"Fred"}]}

这是一个简化的用例:

private void tryReading() {
    String jsonStr = "{"wrapper":[{"id":"13","name":"Fred"}]}";
    ObjectMapper mapper = new ObjectMapper();  
    Wrapper wrapper = null;
    try {
        wrapper = mapper.readValue(jsonStr , Wrapper.class);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("wrapper = " + wrapper);
}

我的实体类是:

public Class Student { 
    private String name;
    private String id;
    //getters & setters for name & id here
}

我的包装类基本上是一个容器对象来获取我的学生列表:

public Class Wrapper {
    private List<Student> students;
    //getters & setters here
}

我不断收到这个错误,“包装器”返回null 。 我不知道缺少什么。 有人可以帮忙吗?

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 
    Unrecognized field "wrapper" (Class Wrapper), not marked as ignorable
 at [Source: java.io.StringReader@1198891; line: 1, column: 13] 
    (through reference chain: Wrapper["wrapper"])
 at org.codehaus.jackson.map.exc.UnrecognizedPropertyException
    .from(UnrecognizedPropertyException.java:53)

您可以使用Jackson的课程级注释:

@JsonIgnoreProperties

它会忽略你在POJO中没有定义的每个属性。 当您只是在JSON中查找几个属性并且不想编写整个映射时非常有用。 杰克逊的网站更多信息。 如果你想忽略任何非声明属性,你应该写:

@JsonIgnoreProperties(ignoreUnknown = true)

您可以使用

ObjectMapper objectMapper = getObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

它将忽略所有未声明的属性。


第一个答案几乎是正确的,但是需要改变getter方法,而不是field - field是私人的(而不是自动检测的)。 进一步说,如果两者都可见,getter优先于字段(有些方法也可以使私有字段可见,但如果你想获得getter,则没有多少意义)

所以getter应该被命名为getWrapper() ,或者注释为:

@JsonProperty("wrapper")

如果您更喜欢getter方法名称。

链接地址: http://www.djcxy.com/p/37865.html

上一篇: Jackson with JSON: Unrecognized field, not marked as ignorable

下一篇: Do I need to escape any characters for a json object?