使用 Jackson 将 POJO 序列化为 xml 时删除 xml 包装器
Remove xml wrapper when serializing POJO to xml using Jackson
我必须获取一个 java 对象并将其序列化为 xml 字符串。
expect 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 class 映射 xml 元素。但我希望 class 被展开。我不想在 xml 文档中使用 class 名称。
这是 class
@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());
我无法在 class 级别添加 @JsonUnwrapped 注释。
我尝试在创建 xml 之前添加此代码:
JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false);
ObjectMapper xmlMapper = new XmlMapper(xmlModule);
这没有影响。 class 包装仍在 xml 中。
如何在不将 class 环绕在元素周围的情况下创建 xml 字符串?
更新
我找到了 xmlMapper 的配置设置,它应该工作但不工作:
xmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
我在网上看到,当从 POJO 创建一个 xml 文件时,无论您是否设置,Jackson 都会在 xml 文件中放置一个根标签。如果您不设置它,它将是 class 名称。我的解决方案是创建具有这些根标签的 xml 字符串,并执行一个字符串函数来删除根标签。
我必须获取一个 java 对象并将其序列化为 xml 字符串。 expect 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 class 映射 xml 元素。但我希望 class 被展开。我不想在 xml 文档中使用 class 名称。 这是 class
@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());
我无法在 class 级别添加 @JsonUnwrapped 注释。 我尝试在创建 xml 之前添加此代码:
JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false);
ObjectMapper xmlMapper = new XmlMapper(xmlModule);
这没有影响。 class 包装仍在 xml 中。 如何在不将 class 环绕在元素周围的情况下创建 xml 字符串?
更新 我找到了 xmlMapper 的配置设置,它应该工作但不工作:
xmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
我在网上看到,当从 POJO 创建一个 xml 文件时,无论您是否设置,Jackson 都会在 xml 文件中放置一个根标签。如果您不设置它,它将是 class 名称。我的解决方案是创建具有这些根标签的 xml 字符串,并执行一个字符串函数来删除根标签。