java - Jackson 反序列化忽略属性无法与 @JsonView 正常工作

标签 java spring spring-mvc jackson json-deserialization

我正在使用spring-framework 4.2.5Jackson 2.6.3在我的应用程序中。我将 @jsonView 用于正确的序列化器实体。但它不适用于解串器。例如我有一个实体如下:

public class A {

    @JsonView(View.Summary.class)
    private int a;

    @JsonView(View.Detail.class)
    private int b

    /*
     * Getters And Setters
     */
}

现在我有一个 Controller 如下:

@RestController
@RequestMapping("/a")
public class AController {

     @RequestMapping("/add")
     @JsonView(View.Summary.class)
     public void add(@RequestBoddy A a)
     {
         // do Something
     }

} 

当我向此方法发送如下 json 时:

{
   "a": 1,
   "b": 2
}

因为我在这个方法中使用了View.Summary.class JsonView,它必须忽略b,但事实并非如此。

我在对象映射器中使用配置如下: objectMapper.enable(DeserializerFeature.FAIL_ON_IGNORED_PROPERTIES)

问题出在哪里

最佳答案

在参数上使用@JsonView(View.Summary.class):

@RequestMapping("/add")
public void add(@RequestBoddy @JsonView(View.Summary.class) A a) {
    // do Something
}

此外,为您的 DTO 使用 Nullable 类型:

public class A {
    @JsonView(View.Summary.class)
    private Integer a;

    @JsonView(View.Detail.class)
    private Integer b

    /*
     * Getters And Setters
     */
}

否则,您将无法区分默认值缺失值

关于java - Jackson 反序列化忽略属性无法与 @JsonView 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950881/

相关文章:

spring - 如何将 Html 输入值(Html 表单)传递给 java Controller ? - Spring MVC

spring - 未定义名为 springSecurityFilterChain 的 bean

java - Action into Submenu 上下文菜单 Java JFace SWT Eclipse

Spring 启动 : Executing the Newer version of SQL file each time we rebuild the application

java - Spring REST 服务以单一方法使用和生成 HTML 表单 POST 和 AJAX/JSON

Spring security 绑定(bind)到 Apache Tomcat tomcat-users.xml UserDatabaseRealm

java - Spring oAuth2 与用户权限

java - Kafka Streams 在多个流中拆分 1 个流

java - 如果不断改变for循环中的条件会发生什么?

java - Gradle 忽略内部关系存储库