json - 当设置了@JsonIgnoreProperties(ignoreUnknown = true) 时,有没有办法检测未映射的 json 属性?

标签 json rest spring-boot jackson

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

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

我的模型只有名字和姓氏,我想列出所有未映射的字段,在这个例子中是“年龄”字段。

最佳答案

是的,可以使用 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"));
}

关于json - 当设置了@JsonIgnoreProperties(ignoreUnknown = true) 时,有没有办法检测未映射的 json 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861406/

相关文章:

sql - 整数 pgsql 的输入语法无效

javascript - 如何使用 jqGrid editoptions 值的函数创建有效的字符串?

java - ResponseEntity 在使用 DeferredResult 时得到空体

java - spring boot 中的事务管理器和数据源 - spring data

java - 从oracle数据库获取数据时浏览器中504网关超时

javascript - Angular 2模拟Http get()返回本地json文件

javascript - 不使用 Ajax 从 header 加载 JSON 文件

python - Flask:添加使用统计

asp.net-mvc - ASP.NET MVC 3 重新路由到其他 Controller 和操作 & Restful API 版本控制

spring-boot - 使用 Spring Boot OAuth2 针对 Google 进行身份验证时,如何将 google 用户电子邮件添加到白名单用户