首页 > 解决方案 > 使用 JAXB 编组不同类型的对象列表

问题描述

我使用 Spring 和 JAXB 并希望编组不同 DTO 对象的列表,因此所需的 XML 响应应如下所示:

<root>
     <dto_list>
              <dto1>
                 <name>xxx</name>
              </dto1>
              <dto2>
                 <location>xxx</location>
              </dto2>
      </dto_list>
</root>

假设类对象是:

@XmlRootElement(name = "Dto1")
@XmlAccessorType(XmlAccessType.NONE)
public class Dto1 {

@XmlElement
private String name;
// setter/getters
}

@XmlRootElement(name = "Dto2")
@XmlAccessorType(XmlAccessType.NONE)
public class Dto2 {

@XmlElement
private String location;
// setter/getters
}

和包装类:

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.NONE)
public class DTOsWrapper {

private List<Object> dto;

public void setDto(List<Object> dto) {
  this.dto = dto;
}

@XmlElementWrapper(name = "dto_list")
@XmlElements({
     @XmlElement(name = "dto1", type = Dto1.class),
     @XmlElement(name = "dto2", type = Dto2.class)
})
public List<Object> getDto() {
  return dto;
}
}

和端点:

@RestController
public class DTOEndpoint {

@Autowired
private IDTOService service;

@RequestMapping(value = "/restxml", produces = "application/xml")
public Object retrieveAllDTOs() {

  DTOsWrapper o = service.findDtos(); //returns a DTOsWrapper obj of a list containing Dto objs, i.e Dto1, Dto2 etc

  return o;

}

我得到 {"error": "org.springframework.http.converter.HttpMessageConversionException: 无法为类 [class <>to.DTOsWrapper] 实例化 JAXBContext:IllegalAnnotationExceptions 的计数;有人知道吗?

标签: springjaxb

解决方案


推荐阅读