我在使用Spring5 reactive WebClient时遇到了一个问题,当时我请求一个endpoint,该endpoint返回一个格式正确的json响应,内容类型为“text/plain;charset=utf-8”。例外情况是
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)
编辑:头是“正确”设置的(Accept,Content-Type),我尝试了不同的Content-Type(json,json+UTF8,text plain,text plain+UTF8)约束,但没有成功。我认为问题是.bodyToFlux(MyDToClass.Class)
不知道如何将“文本”转换为MyDToClass
对象。如果我将请求更改为:
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)是关键。我们必须添加一个自定义解码器,以便指定什么和如何反序列化响应。
但是我们必须记住这一点:类级别的anotation@jsonIgnoreProperties
默认设置为json映射器,对其他映射器不起作用。因此,如果您的DTO不匹配所有响应“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();
...
当我请求一个endpoint返回内容类型为“text/plain;charset=UTF-8”的正确格式的json响应时,我遇到了Spring5 reactive WebClient的问题。例外情况是 编辑2:下一段引用摘自Spring文档(https://docs.Spring.io/Spring/docs/current/spring-framework-reference/web-react
问题内容: 使用firebug时,我在asp.net mvc 4项目中收到此有线错误“ NetworkError:415无法处理… xt / xml; charset = utf-8’– ”。 代码: 服务代码: 该接口是: 和网络配置,我在WCF中使用了无文件: 问题答案: 您需要使用,而不是代码中的常规。这将为端点配置适当的绑定()和行为()以遵守该属性。
嗨,有人能帮我处理这个错误吗?当我使用邮递员发送邮件请求时,这里是我的控制器 这就是我使用postman发送json的方式 我正在尝试搜索如何修复它,但错误仍然存在 编辑:这是邮递员的标题 提前致谢
我试图使用独立的应用程序使用WCF web服务。我可以使用Internet Explorer查看此服务,也可以在Visual studio服务引用中查看。 这就是我得到的错误 如何更改它以使用正确的内容类型? 这是我的配置文件 这是堆栈
我在Spring Boot应用程序中获得了以下@RestController: 当我尝试从RestClient/RestedClient(这两个是mozila的插件)发送请求时,我得到以下错误: {“时间戳”:1512129442019,“状态”:415,“错误”:“不支持的媒体类型”,“消息”:“内容类型'text/plain;charset=utf-8'不支持”,“路径”:“/expositi
我正在开发一个使用C#[MVC4.5]从Magento网站[V1.5.1]下载订单列表的项目,在开始之前,我从www服务器上构建了一个dev服务器复制完整的文件,并且我的程序在dev服务器上运行得很好。之后,我将webservice引用[http://dev.example.com/index.php/api/v2_soap/?wsdl]更改为[http://www.example.com/ind