xml 转对象报错:类的两个属性具有相同名称

阅读: 评论:0

xml 转对象报错:类的两个属性具有相同名称

xml 转对象报错:类的两个属性具有相同名称

今天在用 jaxb 做 xml 转对象时,遇到俩问题。先记录一下:

实例要转的xml

<?xml version="1.0" encoding="utf-8"?>
<root>
<ret_code>0000</ret_code>
<ret_msg>无此退款单据</ret_msg>
<agent_id>1664502</agent_id>
<detail_data> -1 </detail_data>
<sign>8c52afd867f7f23f9a5aa692558</sign>
</root>

 转为对象

@Data
@XmlRootElement(name="root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Test {@XmlElement(name="ret_code")private String retCode;@XmlElement(name="ret_msg")private String retMsg;@XmlElement(name="agent_id")private String agentId;@XmlElement(name="agent_bill_id")private String agentBillId;@XmlElement(name="agent_refund_bill_id")private String agentRefundBillId;@XmlElement(name="refund_amt")private String refundAmt;@XmlElement(name="refund_status")private String refundStatus;@XmlElement(name="deal_time")private String dealTime;@XmlElement(name="out_bill_id")private String outBillId;@XmlElement(name="detail_data")private String detailData;@XmlElement(name="sign")private String sign;}

以下为出现的来问题:

① 意外的元素 (uri:"", local:"root")。所需元素为(none)
分析:

此问题是 Test 类没有加 @XmlRootElement(name="root")  注解所导致的


XmlRootElement@XmlRootElement:  将类或枚举类型映射到 XML 元素,是 xml 文件的根元素。JAXB 中的注解,用来根据 java 类生成xml内容。 

当使用 @XmlRootElement 注释对顶层类或枚举类型进行注释时,类型值被表示为 XML 文档中的 XML 元素。 



② jaxb 对象转xml 报错:类的两个属性具有相同名称 lombok(@Data)

分析:

此问题正常需要从 get 方法上加 @XmlTransient 来避免此错误,但由于茜茜使用的是 lombok 的 @Data,且写在 get 上显得代码比较乱,于是就继续搜有没有更好的方法。

就发现了  W3C school 里的文档有介绍

XmlAccessorType_w3cschool

@XmlAccessorType

类级别的注解。定义这个类中的何种类型需要映射到XML。解释起来有点拗口,可以通过它的属性值更好理解这个参数的意义。

参数 value

参数 value 可以接受4个指定值,这几个值是枚举类型,方便调用:

  • XmlAccessType.FIELD:映射这个类中的所有字段到XML
  • XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
  • XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
  • XmlAccessType.NONE:不映射

于是就加上试了试,即 Test 类的 

@XmlAccessorType(XmlAccessType.FIELD)

果然很好使,于是问题解决。

再次记录一下,希望能帮到你呀。

本文发布于:2024-02-08 20:11:52,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170739459368759.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:报错   属性   对象   名称   两个
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23