我有一个带有Groovy(JDK 11)的Spring引导应用程序,我想接受一个XML请求体。这是我的控制器:
@RestController
class UserController {
@PostMapping(path = "/herd", produces = APPLICATION_XML_VALUE, consumes = APPLICATION_XML_VALUE)
void saveHerd(@RequestBody Users request) {
println user.name
}
}
我的XML请求正文:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user name="foo" age="4"/>
<user name="Jack" age="8"/>
</users>
用户pojos:
class Users {
List<UserDTO> user
}
class UserDTO {
String name
String age
}
问题是我的请求返回的内容类型为‘APPLICATION/XML;CHARSET=UTF-8’不受支持]
如果我调试我的应用程序,我发现Spring Web出于某种原因仍然期待一个JSON,即使我已经将Consumer指定为XML。
为什么Spring-Boot仍然期待JSON而不是XML?
3条答案
按热度按时间gg0vcinb1#
尝试在
Users.class
上添加以下类级别的注解如果包含jaxb库,也要检查maven,因为您没有提到您使用的是哪个JDK。您需要这个库来编组解组XML,但是从JDK 11和更高版本中删除了这个库。
编辑:由于您使用的是JDK 11,并且此版本中删除了jaxb,因此添加了以下依赖项
neekobn82#
我不确定这对你是否有效,但它肯定对我有效。
我使用的是Java 17,并添加了这个库:
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
在模型中,我在类上使用
@JacksonXmlRootElement
,在其属性上使用JacksonXmlProperty
,如果需要接受CDATA部分中的值,则使用@JacksonXmlCData
。无论如何,它是JAXB的替代库。
nkoocmlb3#
在pom.xml中添加以下依赖项
使用@XmlRootElement注解POJO,POJO必须实现Serializable来编组和解组XML
控制器同时接受XML和json,除非使用Consumer=MediaType.APPLICATION_XML_VALUE将其限制为XML