同じ問題に苦しんだ後、私はこの解決策にたどり着きました:
class A
{
@JsonView(VerboseViewA.Minimal.class)
String field1;
@JsonView(VerboseViewA.Complete.class)
String field2;
@JsonView(VerboseViewA.Complete.class)
@JsonSerialize(using = VerboseMinimalSerializer.class)
Collection<B> bEntities;
}
class B
{
@JsonView(VerboseViewB.Minimal.class)
String field2;
@JsonView(VerboseViewB.Complete.class)
String field3;
}
VerboseViewA.Complete.class を使用してクラス A のインスタンスをシリアル化すると、bEnitities が含まれ、カスタム VerboseMinimalSerializer を使用してシリアル化され、その JsonView がオーバーライドされます。
public class VerboseMinimalSerializer extends JsonSerializer<Object>
{
@Override
public void serialize(Object object, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException
{
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.setConfig(mapper.getSerializationConfig().withView(VerboseViewB.Minimal.class));
jsonGenerator.setCodec(mapper);
jsonGenerator.writeObject(object);
}
}
このカスタム シリアライザーは VerboseViewB.Minimal.class ビューを使用していることに注意してください。