当我请求一个endpoint返回内容类型为“text/plain;charset=UTF-8”的正确格式的json响应时,我遇到了Spring5 reactive WebClient的问题。例外情况是
org.springframework.web.reactive.function.UnsupportedMediaTypeException:
Content type 'text/plain;charset=UTF-8' not supported for bodyType=MyDTOClass
webClient.get().uri(endpoint).retrieve().bodyToFlux(MyDTOClass.class)
webClient.get().uri(endpoint).retrieve().bodyToFlux(String.class)
编辑2:下一段引用摘自Spring文档(https://docs.Spring.io/Spring/docs/current/spring-framework-reference/web-reactive.html#webflux-codecs-jackson)
默认情况下,Jackson2Encoder
和Jackson2Decoder
都不支持String
类型的元素。相反,默认的假设是一个字符串或字符串序列表示序列化的JSON内容,由CharSequenceEncoder
呈现。如果您需要从flux
呈现一个JSON数组,请使用flux#collecttolist()
并编码一个mono
。
我认为解决方案是定义一个新的解码器/读取器,以便将字符串转换为MyDTOClass,但我不知道如何做到这一点。
万一有人需要,下面是解决方案:
这个答案(https://stackoverflow.com/a/57046640/13333357)是关键。我们必须添加一个自定义解码器,以便指定反序列化响应的内容和方式。
但是我们必须记住这一点:类级标记@jsonignoreproperties
默认设置为json映射器,对其他映射器没有影响。因此,如果您的DTO不匹配所有响应“JSON”属性,反序列化将失败。
以下是如何配置ObjectMapper和WebClient以从文本响应反序列化json对象:
...
WebClient.builder()
.baseUrl(url)
.exchangeStrategies(ExchangeStrategies.builder().codecs(configurer ->{
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
configurer.customCodecs().decoder(new Jackson2JsonDecoder(mapper, MimeTypeUtils.parseMimeType(MediaType.TEXT_PLAIN_VALUE)));
}).build())
.build();
...
干杯!
我在使用Spring5 reactive WebClient时遇到了一个问题,当时我请求一个endpoint,该endpoint返回一个格式正确的json响应,内容类型为“text/plain;charset=utf-8”。例外情况是 以下是我提出请求的方式: 编辑:头是“正确”设置的(Accept,Content-Type),我尝试了不同的Content-Type(json,json+UTF8,
嗨,有人能帮我处理这个错误吗?当我使用邮递员发送邮件请求时,这里是我的控制器 这就是我使用postman发送json的方式 我正在尝试搜索如何修复它,但错误仍然存在 编辑:这是邮递员的标题 提前致谢
问题内容: 使用firebug时,我在asp.net mvc 4项目中收到此有线错误“ NetworkError:415无法处理… xt / xml; charset = utf-8’– ”。 代码: 服务代码: 该接口是: 和网络配置,我在WCF中使用了无文件: 问题答案: 您需要使用,而不是代码中的常规。这将为端点配置适当的绑定()和行为()以遵守该属性。
我试图使用独立的应用程序使用WCF web服务。我可以使用Internet Explorer查看此服务,也可以在Visual studio服务引用中查看。 这就是我得到的错误 如何更改它以使用正确的内容类型? 这是我的配置文件 这是堆栈
我在Spring Boot应用程序中获得了以下@RestController: 当我尝试从RestClient/RestedClient(这两个是mozila的插件)发送请求时,我得到以下错误: {“时间戳”:1512129442019,“状态”:415,“错误”:“不支持的媒体类型”,“消息”:“内容类型'text/plain;charset=utf-8'不支持”,“路径”:“/expositi
当调用rest模板获取以下异常时,有人能告诉如何解析html内容吗? restClientException:提取类型[class java.lang.Object]和内容类型[text/html;charset=UTF-8]的响应时出错;嵌套异常为org.springframework.http.converter.httpmessagenotreadableException:JSON分析错误