jackson 如何修改Spring的TestRestTemplate内容类型?

mfuanj7w  于 2022-11-09  发布在  Spring
关注(0)|答案(1)|浏览(152)

在添加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())
    }
rbpvctlc

rbpvctlc1#

只需添加JSON转换器,就可以删除TestRestTemplate的覆盖消息转换器。此转换器将Content-Type-header设置为“application/json”:

@BeforeEach
void setUp() {
  restTemplate
      .getRestTemplate()
      .setMessageConverters(Collections.singletonList(new MappingJackson2HttpMessageConverter()));
}

相关问题