【发布时间】:2018-09-26 10:26:18
【问题描述】:
我需要在 PUT 或 POST 请求后检测哪些 json 字段未映射到数据模型。 例如: 如果我发布这个:
{
"firstName": "test",
"lastName": "test 2",
"age": 25
}
我的模型只有名字和姓氏,我想列出所有未映射的字段,在本例中为“年龄”字段。
【问题讨论】:
标签: json rest spring-boot jackson
我需要在 PUT 或 POST 请求后检测哪些 json 字段未映射到数据模型。 例如: 如果我发布这个:
{
"firstName": "test",
"lastName": "test 2",
"age": 25
}
我的模型只有名字和姓氏,我想列出所有未映射的字段,在本例中为“年龄”字段。
【问题讨论】:
标签: json rest spring-boot jackson
如果只是了解哪些属性未映射,您可能需要考虑使用此库:https://github.com/whiskeysierra/jackson-module-unknown-property 它记录所有映射类的未映射属性,而无需修改类本身。
【讨论】:
是的,这可以使用 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"));
}
【讨论】: