我在应用程序中使用spring-framework 4.2.5和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.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
*/
}
否则,您将无法区分默认值和缺失值。