杰克逊反序列化忽略属性与@JsonView无法正常工作

时间:2016-04-30 04:49:36

标签: java spring spring-mvc jackson json-deserialization

我在我的应用程序中使用spring-framework 4.2.5Jackson 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.class JsonView,所以必须忽略b,但它不会。

我在Object mapper中使用配置如下: objectMapper.enable(DeserializerFeature.FAIL_ON_IGNORED_PROPERTIES)

问题在哪里

1 个答案:

答案 0 :(得分:1)

在参数上使用@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
     */
}

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