Java Jackson-在JsonSerializer中使用JsonView?
可以告诉Java Jackson-在JsonSerializer中使用JsonView?,java,jackson,Java,Jackson,可以告诉jsonggenerator使用特定的JsonView序列化对象吗 例如: @Data class Author { @JsonSerialize(using=CustomSerializer.class) List<Book> bestFiveBooksOfAllTime; }; @Data class Book extends BaseEntity { @JsonView(SummaryView.class) private String
jsonggenerator
使用特定的JsonView序列化对象吗
例如:
@Data
class Author {
@JsonSerialize(using=CustomSerializer.class)
List<Book> bestFiveBooksOfAllTime;
};
@Data
class Book extends BaseEntity
{
@JsonView(SummaryView.class)
private String title;
@JsonView(SummaryView.class)
private String author;
private String review;
}
也就是说,在上面的场景中,我希望结果包含一个
bestFiveBooksOfAllTime
的映射,其中的值只是这本书的摘要视图。这是我最终使用的解决方案——请告知是否有更好的方法
@Override
public void serialize(Author value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
mapper.setSerializationConfig(mapper.getSerializationConfig().withView(SummaryView.class));
jgen.writeStartObject();
for (Book book : value.getBestFiveBooksOfAllTime()) {
jgen.writeFieldName(book.getId().toString());
mapper.writeValue(jgen, book);
}
jgen.writeEndObject();
}
也许这个问题对Jackson 4有帮助,您需要一个不同的配置:ObjectMapper mapper=new ObjectMapper();ObjectWriter ObjectWriter=mapper.writer();if(view!=null){mapper.disable(MapperFeature.DEFAULT_view_INCLUSION);objectWriter=mapper.writerWithView(view);}
@Override
public void serialize(Author value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);
mapper.setSerializationConfig(mapper.getSerializationConfig().withView(SummaryView.class));
jgen.writeStartObject();
for (Book book : value.getBestFiveBooksOfAllTime()) {
jgen.writeFieldName(book.getId().toString());
mapper.writeValue(jgen, book);
}
jgen.writeEndObject();
}