2016-10-26 5 views
1

잭슨을 통해 YML하는 객체를 직렬화 할 때 나는 다음과 같은 출력을 얻고에 잘못 그 벌금을 비 직렬화합니다. 즉, 비 직렬화 부분은 의도 한대로 작동합니다. commands지도 (현장 모두와의 getter/setter를)이 유형에, DevCommand에서 DevCommand 인터페이스에 포함잭슨 YAML 형식 정보는 직렬화

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="type") 

콘크리트 클래스 : 내가 생각할 수있는 모든 곳에서 다음과 같은 주석을 뒀다.

Jackson이 원하는 형식 형식을 사용하도록하려면 어떻게해야합니까?

+0

* - YAML로 직렬화하기 때문에 단순히 적용 할 수 없으며 Jackson은 대신 YAML의 태그 시스템을 사용합니다. – flyx

+0

@flyx하지만 yaml의 비 직렬화를 구성하기 위해 JsonTypeInfo 주석을 사용합니다 .... – mtyson

답변

1

Yaml에는 이미 내장 된 유형 정보가 있으므로 Jackson은 기본적으로이를 사용합니다. this issue에서 수정하면 네이티브 형식 ID를 사용하지 않도록 설정됩니다.

YAML에는 기본 유형 ID와 객체 ID가 있으므로 기본값은 (사용자가 선호하는 것으로 가정)입니다. 하지만 다음을 사용하여이를 사용 중지 할 수 있습니다.

YAMLGenerator.Feature.USE_NATIVE_TYPE_ID 

뭔가 같은 유형의 정보가 ** JSON ** 직렬화 및 역 직렬화에 사용하는 경우와 방법의 세부 사항을 구성하는 데 사용 * 주석 : 편의를 위해

YAMLFactory f = new YAMLFactory(); 
f.disable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID); 
ObjectMapper m = new ObjectMapper(f); 

또는 JsonTypeInfo의 문서에서

YAMLMapper m = new YAMLMapper() 
disable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);