JAXB报错:有两个名为XX的属性,类的两个属性具有相同名称XX
目录
报错
如上图
自行测试
使用lombok注解测试Xml和实体类互相转化得出结论
知识储备
Spring 注解加载的流程 注解管理器APT
JAXB源码
原因分析
JavaBean 属性名称与字段名称之间的名称冲突。Jaxb框架将getter或setter在java容器中注册为同名对象,导致同时使用getter和setter时出现冲突
解决
如果不使用Get和Set
- 选择性创建一个即可,注解加到属性上或者Get和Set上都可以
若必须同时存在Get和Set
- 需要使用@XmlTransient禁止绑定或者使用
- 或者是设置对应类
@XmlAccessorType(XmlAccessType.FIELD)
- (特殊注意)在解析XML时,可以将注解加到Get和Set上,不能加到属性上,构造XML时不行
思路
自定义Getter或者Setter注解(在生成的get或set代码中加上注解)
找到Jaxb框架中绑定部分或者使用绑定创建get或set注入的位置
找到Jaxb框架中设置绑定默认属性的位置