解决办法:
使用一个包装类对List或者Set进行包装,如下:
@XmlRootElement(name = "test")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"msg","num","code","list"})
public class ResultTest {
@XmlElement
private String msg;
@XmlElement
private Integer num;
@XmlElement
private Integer code;
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@XmlElementWrapper(name = "subjects")
@XmlElement(name = "subject")
private List<SubjectEntity> list;
public List<SubjectEntity> getList() {
return list;
}
public void setList(List<SubjectEntity> list) {
this.list = list;
}
@Override
public String toString() {
return "ResultTest[" +
"msg='" + msg + '\'' +
", num=" + num +
", code=" + code +
", list=" + list +
']';
}
}
通过使用ResultTest这个类将List< Subject >进行包装 ,然后替代泛型后进行序列化,可以成功将内容转为xml格式,泛型类如下:
@XmlRootElement
@XmlSeeAlso({SubjectEntity.class,SubjectList.class})
@XmlAccessorType(XmlAccessType.FIELD)
public class ResultUtil<T> {
private String msg;
private Integer num;
private Integer code;
@XmlElement(name = "data")
private T data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@XmlTransient
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public ResultUtil(){
}
public ResultUtil(ResultCodeEnum resultCodeEnum){
this.code = resultCodeEnum.getCode();
this.msg = resultCodeEnum.getMsg();
}
public ResultUtil(ResultCodeEnum resultCodeEnum, Integer num){
this.code = resultCodeEnum.getCode();
this.msg = resultCodeEnum.getMsg();
this.num = num;
}
public ResultUtil(ResultCodeEnum resultCodeEnum, Integer num, T data) {
this.msg = resultCodeEnum.getMsg();
this.num = num;
this.code = resultCodeEnum.getCode();
this.data = data;
}
public ResultUtil(ResultCodeEnum resultCodeEnum, T data){
this.msg = resultCodeEnum.getMsg();
this.code = resultCodeEnum.getCode();
this.data = data;
}
@Override
public String toString() {
return "ResultUtil{" +
"msg='" + msg + '\'' +
", num=" + num +
", code=" + code +
'}';
}
}
如果控制台出现javax.xml.bind.JAXBException: class 以及其任何超类对此上下文都是未知的。这个提示的话,则使用@XmlSeeAlso注解,将该类添加为所序列化实体类的子类即可解决这个问题。