Удалите xml-оболочку при сериализации POJO в xml с помощью Jackson - PullRequest
0 голосов
/ 18 марта 2019

Мне нужно взять объект Java и сериализовать его в строку XML. Ожидаемый xml должен выглядеть следующим образом:

 <close_trailer_results>  
     <detl_code_load_cond_stat>CLSD</detl_code_load_cond_stat>  
     <detl_code_serv_type>GND</detl_code_serv_type>  
     <detl_code_due_sort>PRE</detl_code_due_sort>   
     <due_dt_gmt>2018-12-12 08:00:00</due_dt_gmt>   
     <org_id_next_sort>441</org_id_next_sort>  
 </close_trailer_results>

Фактический xml выглядит так:

> <close_trailer_results>
>     <LoadCloseTrailerResponseXml> 
>        <detl_code_load_cond_stat>CLSD</detl_code_load_cond_stat> 
>        <detl_code_serv_type>OVN</detl_code_serv_type> 
>        <detl_code_due_sort>MID</detl_code_due_sort>
>        <due_dt_gmt>2019-03-19 07:59:43</due_dt_gmt> 
>        <org_id_next_sort>61</org_id_next_sort>
>     </LoadCloseTrailerResponseXml> </close_trailer_results

Класс java отображает элементы xml. Но я хочу, чтобы класс был развернут. Я не хочу имя класса в документе XML. Это класс

@JsonPropertyOrder({"detl_code_load_cond_stat", "detl_code_serv_type", "detl_code_due_sort", "due_dt_gmt", "org_id_next_sort"})
 public class LoadCloseTrailerResponseXml {

        private String detl_code_load_cond_stat;    
        private String detl_code_serv_type; 
        private String detl_code_due_sort;
        private String due_dt_gmt;
        private Integer org_id_next_sort;
      ...just getters and setters
    }

При создании xml это код:

XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.setSerializationInclusion(Include.NON_NULL);

        LoadCloseTrailerResponseXml responseTrailer = new LoadCloseTrailerResponseXml();
        responseTrailer.setDetl_code_load_cond_stat(trailerResponse.getTrailer().getDetlCodeLoadCondStat());
        responseTrailer.setDetl_code_serv_type(trailerResponse.getTrailer().getDetlCodeServType());
        responseTrailer.setDetl_code_due_sort(trailerResponse.getTrailer().getDetlCodeDueSort());
        responseTrailer.setDue_dt_gmt(trailerResponse.getTrailer().getDueDateGmt());
        responseTrailer.setOrg_id_next_sort(trailerResponse.getTrailer().getOrgIdNextSort());

Мне не удалось добавить @ JsonUnwrapped аннотацию на уровне класса. Я пытался добавить этот код до создания xml:

JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false);
ObjectMapper xmlMapper = new XmlMapper(xmlModule);

Это никак не повлияло. Обтекание класса было все еще в xml. Как я могу создать строку XML без обтекания класса вокруг элементов?

UPDATE Я нашел параметр конфигурации для xmlMapper, который должен работать, но не работает:

xmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);

1 Ответ

0 голосов
/ 28 марта 2019

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

...