Как скрыть тип бина в snapyaml

Этот код выведет: (YAML)

--- !!org.test.bean.Person

адрес: 4011 16-я авеню С

.....

Можно ли в любом случае скрыть мой тип компонента (org.test.bean.Person)!? (предпочитаю использовать конфигурацию змейки... я не могу ее найти..)

Благодарность!!

public static void dumpYAML(){
    Constructor constructor = new Constructor(Person.class);
    TypeDescription personDescription = new TypeDescription(Person.class);
    personDescription.putListPropertyType("phone", Tel.class);
    constructor.addTypeDescription(personDescription);

    Yaml yaml = new Yaml(constructor);
    Person person = (Person) yaml.load(makeYAML());

    DumperOptions options = new DumperOptions();
    options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
    options.setCanonical(false); // display bean member attribute
    options.setExplicitStart(true); // display --- start

    yaml = new Yaml(options);
    String output = yaml.dump(person);
    System.out.println(output);
}

person Laa    schedule 08.10.2013    source источник


Ответы (2)


Используйте org.yaml.snakeyaml.representer.Representer, установите Tag.MAP, чтобы скрыть корневой тег.

Representer representer = new Representer();
representer.addClassTag(Person.class, Tag.MAP);
person Laa    schedule 09.10.2013

Вы можете расширить Representer, чтобы «скрытно» внедрить любой незарегистрированный класс bean-компонента как Map.

public class MapRepresenter extends Representer {

    @Override
    protected MappingNode representJavaBean(Set<Property> properties, Object javaBean) {
        if (!classTags.containsKey(javaBean.getClass()))
            addClassTag(javaBean.getClass(), Tag.MAP);

        return super.representJavaBean(properties, javaBean);
    }

}
person edgraaff    schedule 27.03.2016