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.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
}
此外,为您的 DTOs 使用 Nullable 类型:
public class A {
@JsonView(View.Summary.class)
private Integer a;
@JsonView(View.Detail.class)
private Integer b
/*
* Getters And Setters
*/
}
否则,您将无法区分默认值和缺失值。
我在我的应用程序中使用 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.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
}
此外,为您的 DTOs 使用 Nullable 类型:
public class A {
@JsonView(View.Summary.class)
private Integer a;
@JsonView(View.Detail.class)
private Integer b
/*
* Getters And Setters
*/
}
否则,您将无法区分默认值和缺失值。