我正在使用Spring 4.x并且我有以下RestController方法,该方法应该返回所有航班的列表
@RequestMapping(produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}, method = RequestMethod.GET)
public FlightWrapper returnAllFlights() {
List<FlightDto> flights = data.findAll();
return new FlightWrapper(flights);
}
FlightWrapper类看起来像这样(rootElement = flight s element = flight):
@XmlRootElement(name = "flights")
public class FlightWrapper {
private List<FlightDto> flights;
public FlightWrapper() {}
public FlightWrapper(List<FlightDto> flights) {
this.flights = flights;
}
@XmlElement(name = "flight")
public List<FlightDto> getFlights() {
return flights;
}
public void setFlights(List<FlightDto> flights) {
this.flights = flights;
}
}
问题是,当我调用returnAllFlights()时,它将以这种格式返回xml:
<FlightWrapper>
<flights>
<flights>
....
</flights>
<flights>
....
</flights>
</flights>
</FlightWrapper>
我预计单次航班的标签应为航班,整个航班列表应为航班,但您可以看到列表中的项目与列表本身具有相同的标签。
知道怎么解决吗?
答案 0 :(得分:5)
根据您的评论,因为您正在使用jackson-dataformat-xml
模块,现在将忽略JAXB注释。您必须更新您的班级才能使用这些注释。
@JacksonXmlRootElement(localName="flights")
public class FlightWrapper {
private List<FlightDto> flights;
public FlightWrapper() {}
public FlightWrapper(List<FlightDto> flights) {
this.flights = flights;
}
@JacksonXmlElementWrapper(useWrapping=false)
@JacksonXmlProperty(localName="flight")
public List<FlightDto> getFlights() {
return flights;
}
public void setFlights(List<FlightDto> flights) {
this.flights = flights;
}
}
我遇到了与你相同的问题,但通过Spring Framework
而不是Spring Boot
。但是当jackson-dataformat-xml
模块添加到类路径中时会发生这种行为。根据我的经验。