设置@JsonIgnoreProperties(ignoreUnknown=true)时,是否有方法检测未映射的json属性?

设置@JsonIgnoreProperties(ignoreUnknown=true)时,是否有方法检测未映射的json属性?,json,rest,spring-boot,jackson,Json,Rest,Spring Boot,Jackson,我需要检测哪些json字段在PUT或POST请求后未映射到数据模型。 例如: 如果我发布这个: { "firstName": "test", "lastName": "test 2", "age": 25 } 我的模型只有firstName和lastName,我想列出所有未映射的字段,在本例中是“age”字段。是的,可以使用Jackson的注释@JsonAnySetter @JsonIgnoreProperties(ignoreUnknown = true) public class D

我需要检测哪些json字段在PUT或POST请求后未映射到数据模型。 例如: 如果我发布这个:

{
 "firstName": "test",
 "lastName": "test 2",
 "age": 25
}

我的模型只有firstName和lastName,我想列出所有未映射的字段,在本例中是“age”字段。

是的,可以使用Jackson的注释
@JsonAnySetter

@JsonIgnoreProperties(ignoreUnknown = true)
public class DTO {
    private String first;
    private String last;
    private Map<String, Object> unknown = new HashMap<>();

    // getters/setters omitted

    @JsonAnySetter
    public void set(String name, Object value) {
        unknown.put(name, value);
    }

    public Map<String, Object> getUnknown() {
        return unknown;
    }
}

如果只是学习哪些属性是未映射的,你可能想考虑使用这个库:


它记录所有映射类的未映射属性,而无需修改类本身。

谢谢。这正是我想要的,尽管尼古拉的回答起了作用。
@Test
public void testUnknown() throws Exception {
    String json = "{\"first\":\"John\", \"last\":\"Doe\", \"age\":\"29\"}";
    DTO dto = new ObjectMapper().readValue(json, DTO.class);
    assertEquals(1, dto.getUnknown().size());
    assertEquals("29", dto.getUnknown().get("age"));
}