[SPRING] 중첩 된 객체와 @Jsonview 사용하여 직렬화하는 방법
SPRING중첩 된 객체와 @Jsonview 사용하여 직렬화하는 방법
나는 다른 클래스의 컬렉션을 보유하는 클래스를 가지고있다.
class A{
@JsonView(VerboseViewA.Minimal.class)
String field1;
@JsonView(VerboseViewA.Complete.class)
String field2;
@JsonView(VerboseViewA.Complete.class)
Collection<B> bEntities;
}
class B{
@JsonView(VerboseViewB.Minimal.class)
String field2;
@JsonView(VerboseViewB.Complete.class)
String field3;
}
내가 클래스 A가 VerboseViewA.Complete를 사용하여 직렬화 할 때, 내가 수집 bEntities가 VerboseViewB.Minimal을 사용하여 직렬화 할.
그것을 달성하는 방법이 있나요?
해결법
-
==============================
1.이건 내 문제를 해결합니다. 나는이 문제를 해결하기 위해 더 나은 방법이 있는지 확실하지 않습니다.
이건 내 문제를 해결합니다. 나는이 문제를 해결하기 위해 더 나은 방법이 있는지 확실하지 않습니다.
class A{ @JsonView(VerboseViewA.Minimal.class) String field1; @JsonView(VerboseViewA.Complete.class) String field2; @JsonView(VerboseViewA.Complete.class) Collection<B> bEntities; } class B{ @JsonView({VerboseViewA.Complete.class,VerboseViewB.Minimal.class}) String field2; @JsonView(VerboseViewB.Complete.class) String field3; }
-
==============================
2.같은 문제로 어려움을 겪고 후, 나는이 솔루션에 와서 :
같은 문제로 어려움을 겪고 후, 나는이 솔루션에 와서 :
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는 JsonView를 오버라이드 (override), 사용자 정의 VerboseMinimalSerializer를 사용하여 포함 직렬화됩니다
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을 사용하고 확인할 수 있습니다.
-
==============================
3.당신은 당신의 JSON 뷰 계층 구조를 약간 변경해야합니다 :
당신은 당신의 JSON 뷰 계층 구조를 약간 변경해야합니다 :
public class MinimalView { }; public class AComplete extends MinimalView { }; public class BComplete extends MinimalView { };
당신은 같은 클래스를 주석을 달 수 있습니다
class A{ @JsonView(MinimalView.class) String field1; @JsonView(AComplete.class) String field2; @JsonView(AComplete.class) Collection<B> bEntities; } class B{ @JsonView(Minimal.class) String field2; @JsonView(BComplete.class) String field3; }
당신이보기 AComplete를 사용하여 직렬화 할 때 AComplete이 MinimalView를 확장하기 때문에, 시리얼 라이저는 AComplete 및 MinimalView 속성을 취할 것입니다.
from https://stackoverflow.com/questions/23260464/how-to-serialize-using-jsonview-with-nested-objects by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 무엇 여러 필드에 대한 findBy를 사용하는 스프링 데이터 JPA 방법이며, 또한 모든 필드에 포함하는 절을 사용 (0) | 2019.10.03 |
---|---|
[SPRING] 봄을 통해 편안하고 인증 (0) | 2019.10.03 |
[SPRING] 스프링 MVC - RestTemplate 출시 예외 HTTP 404 일이 (0) | 2019.10.03 |
[SPRING] 봄 : 특정 인터페이스 및 유형의 모든 콩을 얻을 (0) | 2019.10.03 |
[SPRING] 봄 데이터 나머지 V.S 패치 LinkableResources을 PUT (0) | 2019.10.03 |