2016-10-26 3 views
1

Ich erhalte die folgende Ausgabe, wenn ein Objekt Serialisierung über Jackson yml:Jackson Yaml Typ Info ist falsch auf die Serialisierung

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

Doch was ich will, ist:

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

Ich bin in der Lage dieses Geld zu deserialisieren. Das heißt, der Deserialisierungsteil funktioniert wie beabsichtigt. Ich habe die folgende Anmerkung setze überall kann ich mich vorstellen:

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

Einschließlich auf dem DevCommand Schnittstelle, auf DevCommand die konkrete Klasse, von der Art, die das commands Karte (sowohl das Feld und den Getter/Setter) hat.

Was muss ich tun, um Jackson zu zwingen, das gewünschte Format zu verwenden?

+0

Von doc von JsonTypeInfo: * Anmerkung verwendet für die Konfiguration von Details, ob und wie Typinformationen mit ** ** JSON Serialisierung und Deserialisierung * - Da Sie nach YAML serialisieren, ist es einfach nicht anwendbar und Jackson verwendet stattdessen das Tag-System von YAML. – flyx

+0

@flyx Aber es verwendet die JsonTypeInfo Annotation, um die Deserialisierung des Yaml zu konfigurieren .... – mtyson

Antwort

1

Yaml hat Typinformationen bereits eingebaut, also verwendet Jackson das standardmäßig. Von this issue besteht die Korrektur darin, die native Typ-ID zu deaktivieren.

YAML hat nativen Typ Ids und Objekt-IDs, so standardmäßig jene verwendet werden (vorausgesetzt, dies ist, was die Nutzer bevorzugen). Aber Sie können dies deaktivieren mit:

YAMLGenerator.Feature.USE_NATIVE_TYPE_ID 

und speziell deaktivieren; so etwas wie:

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

oder, für die Bequemlichkeit

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