public class Views {
public static class Public {}
public static class Internal extends Public {}
}
下面是使用视图的Item实体:
public class Item {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String itemName;
@JsonView(Views.Internal.class)
public String ownerName;
}
最后是完整的测试:
@Test
public void whenSerializingUsingJsonView_thenCorrect()
throws JsonProcessingException {
Item item = new Item(2, "book", "John");
String result = new ObjectMapper()
.writerWithView(Views.Public.class)
.writeValueAsString(item);
assertThat(result, containsString("book"));
assertThat(result, containsString("2"));
assertThat(result, not(containsString("John")));
}
3条答案
按热度按时间sczxawaw1#
使用@JsonProperty注解POJO
id
和name
属性,使用@JsonIgnore注解管理器如果只需要
id
和name
,请使用默认的ObjectMapper。当你需要所有的字段时,使用一个自定义的ObjectMapper。6ljaweal2#
有很多方法可以做到这一点:
1.将不需要的字段设置为
null
,并在类级别使用@JsonInclude(Include.NON_NULL)
注解。1.提供
SimpleBeanPropertyFilter
,同时使用ObjectMapper
,并在类级别使用注解@JsonFilter(<filter_name>)
。1.使用自定义序列化程序。
e0bqpujr3#
你可以用
@JsonView
来实现这一点(baeldung的荣誉):@JsonView
表示将包含属性以进行序列化/重新序列化的View。例如,我们将使用@JsonView来序列化Item实体的示例。
首先,让我们从视图开始:
下面是使用视图的Item实体:
最后是完整的测试: