【问题标题】:Remove xml wrapper when serializing POJO to xml using Jackson使用 Jackson 将 POJO 序列化为 xml 时删除 xml 包装器
【发布时间】:2019-03-18 16:49:18
【问题描述】:

我必须获取一个 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 字符串?

更新 我找到了一个 xmlMapper 的配置设置,它应该可以工作,但不能:

xmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);

【问题讨论】:

  • 您如何配置XMLclose_trailer_results 节点包裹?您能否展示将Java 对象序列化为XML 的代码?
  • xmlModule.setDefaultUseWrapper(false);为我工作谢谢

标签: java xml jackson-dataformat-xml


【解决方案1】:

我在网上看到,当从 POJO 创建一个 xml 文件时,无论你是否设置,Jackson 都会在 xml 文件中放置一个根标签。如果你不设置它,它将是类名。我的解决方案是创建具有这些根标签的 xml 字符串并执行字符串函数来删除根标签。

【讨论】:

    猜你喜欢
    • 2019-01-19
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2018-01-27
    相关资源
    最近更新 更多