首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JsonSerializer中使用JsonView?

在JsonSerializer中使用JsonView?
EN

Stack Overflow用户
提问于 2012-12-19 07:24:15
回答 1查看 2K关注 0票数 3

是否可以使用特定的JsonView告诉JsonGenerator序列化对象?

例如:

代码语言:javascript
复制
@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;
}

在我的CustomSerializer中,我希望能够这样做:

代码语言:javascript
复制
public class CustomSerializer extends JsonSerializer<Author> {

    @Override
    public void serialize(Author value, JsonGenerator jgen,
            SerializerProvider provider) throws IOException,
            JsonProcessingException {
        jgen.writeStartObject();
        for (Book book : value.getBestFiveBooksOfAllTime()) {
                    // Something like the following...
            jgen.writeObjectFieldUsingView(book.getId().toString(), book, SummaryView.class);
        }
        jgen.writeEndObject();
    }
}

也就是说,在上面的场景中,我希望结果包含bestFiveBooksOfAllTime的映射,其中的值就是书的SummaryView

EN

回答 1

Stack Overflow用户

发布于 2012-12-19 07:53:05

这是我最终使用的解决方案--请告诉我是否有更好的方法

代码语言:javascript
复制
@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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13943174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档