我正在使用spring-framework 4.2.5和 Jackson 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/