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();
}