Jackson 反序列化忽略属性不能与@JsonView 一起正常工作

Jackson deserialization ignore properties does not work properly with @JsonView

我在我的应用程序中使用 spring-framework 4.2.5 and Jackson 2.6.3。我将 @jsonView 用于适当的 serializer 实体。但它不能正常工作 deserializer。例如我有一个实体如下:

public class A {

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

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

    /*
     * Getters And Setters
     */
}

现在我有一个控制器如下:

@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.classJsonView这个方法,它必须忽略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
}

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

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

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

    /*
     * Getters And Setters
     */
}

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