Swagger 정의에서 클래스를 생성했습니다. 하나의 필드가 공통적으로 op
인 4 가지 클래스가 있습니다 (클래스 계층 구조가 없으며 필드는 각 클래스에서 복제됩니다).JSON 데이터의 스트림을 객체로 읽는 Jackson과 생성 된 클래스 작업
op
필드의 값에 따라 JSON 데이터 스트림을 4 개의 다른 클래스 중 하나로 역 직렬화하려고합니다. 예를 들어
:
나는이 잭슨을 사용할{"op": "typeA", ...} -> generates TypeA
{"op": "typeB", ...} -> generates TypeB
. 문제는 내가 가진 모든 예제는 원래 클래스를 수정하여 클래스 계층 구조로 문제를 해결할 수 있다고 가정한다는 것입니다. 그러나 내 질문에 어떻게 원래 클래스를 수정하지 않고이 문제를 해결할 수 있습니다?
는 원래 예는 계층 구조를 가정하고 다음과 같이 수행됩니다
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "op",
visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = ConnectionMessage.class, name = "connection"),
@JsonSubTypes.Type(value = StatusMessage.class, name = "status"),
@JsonSubTypes.Type(value = MarketChangeMessage.class, name = "mcm"),
@JsonSubTypes.Type(value = OrderChangeMessage.class, name = "ocm"),
})
public interface MixInResponseMessage {
}
위의 내용을 전제로하기 때문에이 답변은 완전하지 않습니다. 그러나 믹스 인을 사용하여 가능한 경우 아이디어를 얻을 수 있어야합니다. 다음은 믹스 라인을 사용하여 부모 추상 클래스를 타겟팅하는 예입니다. https://github.com/Flaw101/springbootmixin –