前言
最近做微信小程序支付(JSAPI支付),支付回调采用流读取方式读取回调信息,但为简便,可以通过@RequestBody直接接收字
符串,在demo中测试可以,但在项目中不行(报HttpMediaTypeNotSupportedException: Content type ‘text/xml;charset=UTF-8’
not supported错),因此考虑是不是消息转换器的问题。
参数解析流程
缺失消息转换器
思考
发现是少了2个StringHttpMessageConverter,我tiu,然后我尼玛直接在项目中MvcConfig中主动添加这个消息转换器
结果最后还是没有StringHttpMessageConverter转换器
接着查看该方法被调用处
断点查看
发现在执行extendMessageConverters方法后StringHttpMessageConverter就都没了
查看调用处
进入方法查看
这里就会便利所有的WebMvcConfigurer,并执行方法
此处突然发现项目中MvcConfig也有重写该方法,我tiu,直接尼玛点过去
我笑了,原来是同事在这里移除了这类转换器,我说尼玛怎么demo和项目不一样
乌龙
其实是项目中将StringHttpMessageConverter移除了,才导致少了这个转换器- - 。
不过最终还是了解到了Spring MVC是怎么解析参数的了!!!害- -。
还有就是Content type ‘xxx’ not supported问题就是已存在消息转换器不支持这种Content-Type。