我在应用程序中使用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,但是不能。

我在对象映射器中使用配置,如下所示:
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
     */
}


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

10-06 11:21