因为这个问题搞了一整天,实在受不了了晚上去问了我哥。第二天白天继续搞,都没搞明白。
后来发现是简单的xml标签和bean对应关系。
但是因为xml层级太多,自己改的时候改不完全,怎么改都错,建议大家开个excel,把xml的层级列好,并把bean列在一旁,对应着改名字。
下面记录一下严格的标签对应例子,方便第一次接触的人(like me)快速理解.
这是xml格式的数据:
<PERSON>
<MSG>NO ERROR</MSG>
<ADULT>
<TEACHER>
<NAME>20</NAME>
</TEACHER>
</ADULT>
</PERSON>
对应的类
@Data
@XmlRootElement(name="PERSON")
@XmlAccessorType(XmlAccessType.FIELD)
public class PEOPLE implements Serializable {
private String MSG;
@XmlElementWrapper(name="ADULT")
private List<ADULT> TEACHER;
}
@Data
public class ADULT implements Serializable {
private String NAME;
}
这里
1)xml的根节点person,和@XmlRootElement里属性指定的name必须一致,但是和这个类名不需要一致
2)@XmlElementWrapper是对应xml的次节点,其属性name也必须和xml的此节点名称adult保持一致,而且adult这个类的类名,也必须和指定的name保持一致;
这个注解的里是这么写的,理论上类名不用一致,只要注解里指定的name属性和xml次节点名称一致,但是我试了,不写一样还是会null。所以保险起见,还是保持一致。
@Retention(RUNTIME) @Target({FIELD, METHOD})
public @interface XmlElementWrapper {
/**
* Name of the XML wrapper element. By default, the XML wrapper
* element name is derived from the JavaBean property name.
*/
String name() default "##default";
}
3)private list < adult> teacher,这个属性名必须和xml次次节点名字保持一致;
只有严格保持bean每层都和xml节点名一致,才能接收到对应数据,一点错误,就等着null吧。
然后@Data注解和jaxb的注解不冲突,如果出问题了,不是@data注解的锅。