gpt4 book ai didi

Spring RestController 忽略包装类中的 XmlElement 注释

转载 作者:行者123 更新时间:2023-12-02 07:23:08 26 4
gpt4 key购买 nike

我正在使用 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 = Flights 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>

我预计单个航类应具有标签航类,整个航类列表应为航类,但是您可以看到列表中的项目与列表本身具有相同的标签。

知道如何修复它吗?

最佳答案

根据您的评论,因为您使用的是 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 模块添加到类路径中时,就会发生这种行为。根据我的经验。

关于Spring RestController 忽略包装类中的 XmlElement 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com