在添加Jackson的库将POJO序列化为XML jackson-dataformat-xml
后,我的Sping Boot 应用程序开始出现问题。
当我运行下面的测试时,它发出一个带有默认头文件Content-Type: application/xml
的请求,我找不到一种方法将其设置为Content-Type: application/json
。如果我在.exchange(...)
方法中显式地放置一个带有所需内容类型的头文件,它就可以工作。
这真的很奇怪,因为如果我删除前面提到的依赖项,它将默认为json。
我需要找到一种配置bean的方法,这样我就不必更改所有的测试。
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class FooBarControllerIT(
@Autowired private val restTemplate: TestRestTemplate,
@Autowired val objectMapper: ObjectMapper
) {
@Test
fun testeTeste() {
val header = HttpHeaders()
// uncommenting the code bellow makes it work
//.apply { set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) }
val response = restTemplate.exchange(
"/foobar",
HttpMethod.GET,
HttpEntity<Any>(header),
String::class.java
)
assertEquals(HttpStatus.OK, response.statusCode)
}
}
提前感谢!
***编辑
我可以用下面的代码来解决这个问题。
@PostConstruct
fun changeTestRestTemplate() {
testRestTemplate.restTemplate.messageConverters.removeIf { it is MappingJackson2XmlHttpMessageConverter }
testRestTemplate.restTemplate.messageConverters.add(MappingJackson2XmlHttpMessageConverter())
}
1条答案
按热度按时间rbpvctlc1#
只需添加JSON转换器,就可以删除TestRestTemplate的覆盖消息转换器。此转换器将Content-Type-header设置为“application/json”: