3

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本の だけです。

4

1 に答える 1

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();
}
于 2012-12-18T23:53:04.727 に答える