2014-11-10 2 views
2

В настоящее время я пишу некоторый код, используя Jackson для сериализации устаревших POJO в XML, но мне нужно, чтобы они были сериализованы с использованием атрибутов, а не дочерних элементов. Есть ли способ сделать это с помощью Джексона без добавления аннотаций к устаревшим классам?Использование Jackson для сериализации xml с использованием атрибутов без аннотаций

ответ

5

Есть ли способ сделать это с помощью Джексона без добавления аннотаций к устаревшим классам?

Вы можете попытаться использовать аннотации Mix-in в jackson. Таким образом, вы можете сохранить свои унаследованные классы и одновременно использовать функцию аннотаций. Вот как.

Person.class

class Person { 
     private String username; 
     private String lastName; 
     private String address; 
     private Integer age; 
     //getters and setters 

    } 

Mixin.class

abstract class Mixin{ 
@JacksonXmlProperty(isAttribute = true) 
    abstract String getUsername(); 

    @JacksonXmlProperty(isAttribute = true) 
    abstract String getLastName(); 

    @JacksonXmlProperty(isAttribute = true) 
    abstract String getAddress(); 

    @JacksonXmlProperty(isAttribute = true) 
    abstract String getAge(); 

} 

Основной метод

public static void main(String[] args) throws JsonProcessingException { 
    Person p = new Person("Foo","Bar"); 
    p.setAddress("This address is too long"); 
    p.setAge(20); 

    ObjectMapper xmlMapper = new XmlMapper(); 

    xmlMapper.addMixInAnnotations(Person.class, MixIn.class); 
    String xml = xmlMapper.writeValueAsString(p); 
    System.out.println(xml); 
} 

Выход

<Person xmlns="" username="Foo" lastName="Bar" address="This address is too long" age="20"></Person> 
+0

Yesss! Благодарим вас за предоставление такого четкого примера + WORKING для использования Mixin + Jackson XML Mapper – akapulko2020

Смежные вопросы