2020-12-09 @RequestBody 接收String 报xxx: Content type ‘text/xml;charset=UTF-8‘ not supported

2020/12/10 22:57:27

前言

最近做微信小程序支付(JSAPI支付),支付回调采用流读取方式读取回调信息,但为简便,可以通过@RequestBody直接接收字
符串,在demo中测试可以,但在项目中不行(报HttpMediaTypeNotSupportedException: Content type ‘text/xml;charset=UTF-8’
not supported错),因此考虑是不是消息转换器的问题。


参数解析流程

学习 - 请求参数解析流程


缺失消息转换器

  • demo中

  • 项目中


思考

发现是少了2个StringHttpMessageConverter,我tiu,然后我尼玛直接在项目中MvcConfig中主动添加这个消息转换器

结果最后还是没有StringHttpMessageConverter转换器
接着查看该方法被调用处


断点查看

发现在执行extendMessageConverters方法后StringHttpMessageConverter就都没了
查看调用处

进入方法查看


这里就会便利所有的WebMvcConfigurer,并执行方法

此处突然发现项目中MvcConfig也有重写该方法,我tiu,直接尼玛点过去

我笑了,原来是同事在这里移除了这类转换器,我说尼玛怎么demo和项目不一样


乌龙

其实是项目中将StringHttpMessageConverter移除了,才导致少了这个转换器- - 。
不过最终还是了解到了Spring MVC是怎么解析参数的了!!!害- -。
还有就是Content type ‘xxx’ not supported问题就是已存在消息转换器不支持这种Content-Type。