gpt4 book ai didi

java - 如何在Spring测试环境中反序列化ClientResponse主体?

转载 作者:行者123 更新时间:2023-12-01 17:48:14 25 4
gpt4 key购买 nike

我正在尝试创建一个 ClientResponse在测试中并使用它来测试服务,该服务也以标准方式进行反序列化 response.bodyToMono(..class..) 。但我建立虚假客户响应的方式似乎有问题。因为我收到 UnsupportedMediaTypeException正在测试中。

尽管如此,当 WebClient 返回 ClientResponse 时,相同的代码在运行时 SpringBoot 应用程序中工作正常。 (这是内部构建的)。

让我们看看失败的最简单的情况

org.springframework.web.reactive.function.UnsupportedMediaTypeException:
Content type 'application/json' not supported for bodyType=java.lang.String[]
<小时/>
 void test()
{
String body = "[\"a\", \"b\"]";
ClientResponse response = ClientResponse.create(HttpStatus.OK)
.header(HttpHeaders.CONTENT_TYPE,
MediaType.APPLICATION_JSON_VALUE)
.body(body)
.build();

String[] array = response.bodyToMono(String[].class).block();

assertEquals(2, array.length);
}

请帮助我理解应该如何构建客户端响应以允许在测试环境中进行标准(json -> 对象)反序列化。

最佳答案

手动创建的ClientResponse无权访问默认列表中的Jackson2Json交换策略。也许可以使用 Spring 自动配置进行配置,在没有 Spring 上下文的测试中将其关闭。

这是强制(反)序列化 String <-> json 的直接方法:

static ExchangeStrategies jacksonStrategies()
{
return ExchangeStrategies
.builder()
.codecs(clientDefaultCodecsConfigurer ->
{
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(new ObjectMapper(), MediaType.APPLICATION_JSON));
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(new ObjectMapper(), MediaType.APPLICATION_JSON));

}).build();
}

然后在create函数中使用它

ClientResponse.create(HttpStatus.OK, jacksonStrategies())...

关于java - 如何在Spring测试环境中反序列化ClientResponse主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60830961/

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