2016-10-26 33 views
1

序列化對象時通過傑克遜陽明我得到以下輸出:傑克遜YAML類型的信息是錯誤的序列

--- 
commands: 
    dev: !<foo.bar.baz.DevCommand> 

不過,我要的是:

--- 
commands: 
    dev: 
    type: foo.bar.baz.DevCommand 

我能反序列化該罰款。也就是說,反序列化部分按預期工作。我已經把下面的註釋到處我能想到的:

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

包括DevCommand接口上,對DevCommand具體類,其上有commands地圖(外地和getter/setter方法兩者)的類型。

我需要做些什麼來強制傑克遜使用我想要的格式?

+0

從JsonTypeInfo的DOC:*用於配置是否以及如何類型信息與** ** JSON序列化和反序列化使用的細節詮釋* - 由於您序列化爲YAML,因此它不適用,Jackson使用YAML的標籤系統。 – flyx

+0

@flyx但它使用JsonTypeInfo註釋來配置yaml的反序列化.... – mtyson

回答

1

Yaml有已經建立的類型信息,所以Jackson默認使用它。從this issue,解決方法是禁用使用本機類型ID。

YAML具有原生類型Ids和對象ID,因此默認情況下使用這些ID (假設這是用戶喜歡的)。但是你可以通過以下方式禁用它:

YAMLGenerator.Feature.USE_NATIVE_TYPE_ID 

並特別禁用該功能;是這樣的:

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

,或者爲了方便

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