【问题标题】:Jackson - use a JsonView within a JsonSerializer?杰克逊 - 在 JsonSerializer 中使用 JsonView?
【发布时间】:2018-11-14 22:00:17
【问题描述】:

是否可以告诉JsonGenerator 使用特定的 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;
}

在我的CustomSerializer 中,我希望能够按照以下方式做一些事情:

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

【问题讨论】:

标签: java jackson


【解决方案1】:

这是我最终使用的解决方案——如果有更好的方法,请告知

@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); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 2013-06-15
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多