Jackson Json Type Info 。As.EXTERNAL_PROPERTY가 예상대로 작동하지 않습니다.
나는 내가 통제할 수 없는 JSON을 해석하기 위해 잭슨을 이용하고 있다.JSON은 다음과 같습니다.
{
"status":"0"
"type":"type1"
"info": {
// additional fields
}
}
우리 반은 이렇게 생겼다.
public class Response {
private String status;
private String type;
private Info info
}
사용하는 정보의 하위 클래스는 유형 속성에 따라 다르므로 정보에 대한 매핑은 다음과 같습니다.
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
@JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public abstract class Info {
// some fields
}
식별 요소가 캐스트해야 하는 요소와 동일한 수준일 때 유형 정보를 사용하는 올바른 방법입니다.하지만 이 방법은 작동하지 않습니다. 항상 같은 오류가 발생합니다.
com.sysml.syslog.syslogind.syslogindJson Mapping Exception:예기치 않은 토큰(END_OBJECT)입니다. FILD_NAME: 유형 ID를 포함할 속성 'type'이 없습니다.
EXTERNAL_PROPERTY를 PROPERTY로 변경해도 같은 에러가 발생합니다.EXTERNAL_PROPERTY에 대한 이해가 잘못된 건가요?
자바독에서:
속성을 입력할 JSON 개체와 동일한 수준의 형제 속성으로 계층에서 한 단계 더 높게 포함한다는 점을 제외하면 포함 메커니즘이 PROPERTY와 유사합니다.이 선택사항은 속성에만 사용할 수 있으며 유형(클래스)에는 사용할 수 없습니다.수업에서 사용하려고 하면 대신 기본 PROPERTY의 포함 전략이 발생합니다.
can only be used for properties
굵은 글씨로 표시됩니다.출처: Json Type Info.As.EXTERNAL_PROPERTY.
모든 .Info
으로 info
★★★★★★★★★★★★★★★★★」setInfo
in the method in the method in 。Response
를 누릅니다
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = { @JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
@JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public void setInfo(Info info) {
this.info = info;
}
같은 엔 지우고, 지우고, , 지우고, 지우고, 지우고, 지우고.type
property の の from property 。Response
클래스. 시리얼화 프로세스 중에 동적으로 생성됩니다.탈직렬화에서 잭슨은 유형을 신경 쓰기 때문에 당신은 그것을 필요로 하지 않는다.츠키다
class Response {
private String status;
private Info info;
//getters, setters
}
JSON 네스트클래스의 데이터 바인딩도 참조해 주세요.
AutoValue 또는 기타 소스 코드 생성기를 사용하는 모든 사용자에게 @JsonTypeInfo 및 @JsonSubTypes 주석은 추상 메서드에 주석을 달 때 작동하지 않습니다(생성된 코드에서 실제 속성을 반환합니다).이렇게 하면 다음과 같은 예외가 발생합니다.com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of [xxx] (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
또한 메서드에서 @JsonCreator로 주석을 달면 매개 변수에 주석을 달지 않습니다.이렇게 하면 다음과 같은 이상한 예외가 발생합니다.com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class [xxx]
클래스에하지 않도록 , 「소스코드 생성기」를 .Response
공통 잭슨 주석을 사용하는 오브젝트: @JsonCreator, @JsonProperty 및 @JsonTypeInfo, @JsonSubTypes
Jackson 2.10.5로 테스트 완료
언급URL : https://stackoverflow.com/questions/18757431/jackson-jsontypeinfo-as-external-property-doesnt-work-as-expected
'programing' 카테고리의 다른 글
워드프레스에서 상위 페이지의 모든 하위 페이지를 가져오려면 어떻게 해야 합니까? (0) | 2023.03.01 |
---|---|
선택 목록의 출력을 부모 목록에 종속시키려면 어떻게 해야 합니까? (0) | 2023.02.18 |
Date Time을 사용할 수 있는 이유MinValue가 UTC보다 이전 시간대로 일련화되지 않았습니까? (0) | 2023.02.15 |
각도에서의 ScrollTo 함수JS (0) | 2023.02.15 |
TypeError:scrollIntoView는 함수가 아닙니다. (0) | 2023.02.15 |