2016-10-26 2 views
1

Я получаю следующий результат при сериализации объекта в YML через Джексон:Джексон 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 карту (как поле и геттеры/сеттеры).

Что мне нужно сделать, чтобы заставить Джексона использовать формат шрифта, который я хочу?

+0

От РОУ JsonTypeInfo: * Аннотация используется для настройки деталей, если и как информация о типе используется с ** ** JSON сериализации и десериализации * - поскольку вы сериализовываетесь в YAML, это просто неприменимо, и Джексон использует систему тегов YAML. – flyx

+0

@flyx Но он использует аннотацию JsonTypeInfo для настройки десериализации yaml .... – mtyson

ответ

1

Yaml имеет встроенную информацию о типе, поэтому Джексон использует это по умолчанию. От this issue исправление заключается в отключении с использованием идентификатора типа native.

YAML имеет собственный тип и идентификаторы идентификаторов объектов, так что по умолчанию те используются (при условии, что это то, что предпочитают пользователи). Но вы можете отключить это:

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); 
Смежные вопросы