Spring RestController忽略Wrapper类中的XmlElement批注

Mar*_*uka 2 spring spring-restcontroller

我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我调用returnAllFlights()时,它将以这种格式返回xml:

<FlightWrapper>
    <flights>
        <flights>
            ....
        </flights>
        <flights>
            ....
        </flights>
    </flights>
</FlightWrapper>
Run Code Online (Sandbox Code Playgroud)

我预计单程航班应该有标签航班,整个航班列表应该是航班,但是你可以看到列表中的项目与列表本身具有相同的标签.

知道怎么解决吗?

Man*_*dan 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有同样的问题,但通过Spring Framework,而不是通过Spring Boot.但是当jackson-dataformat-xml模块添加到类路径中时会发生这种行为.根据我的经验.