如何在JSON响应(视图)中包含Java对象的所有字段,而不在该Java对象的每个字段上指定@JsonView
?
编辑:我需要这样才能实现不使用其他外部库。
答案 0 :(得分:2)
这是@JsonView
的常见问题。注释仅适用于方法和属性,因此您不能只注释整个类并包含所有属性。
我将假设您在Spring中使用它。这种行为是由于Spring选择在ObjectMapper中默认禁用所有属性的包含。因此,仅包含@JsonView
带注释的属性,而其他属性则不包括。
您可以将MapperFeature.DEFAULT_VIEW_INCLUSION
设置为true
来更改此设置。像这样:
普通Java:
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);
Spring Boot(将其添加到application.properties):
spring.jackson.mapper.default-view-inclusion=true
默认情况下,这种方式在JSON seralization期间将包含所有属性,您可以使用@JsonInclude
和其他Jackson注释来控制包含和排除。
答案 1 :(得分:0)
从Jackson 2.9开始,@JsonView
注释现在可以应用于类级别,以具有您要求的行为。
https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.9
允许在类上使用@JsonView,以指定默认视图用于非注释属性。
@JsonView(MyView.class);
public class AllInView {
// this will be in MyView
private String property1;
// this will be in MyView
private String property2;
// this will be in DifferentView
@JsonView(DifferentView.class)
private String property3;
}