FeignClient调用服务,传递的字符串参数中文数据变成???问题解决
FeignClient调用服务,传递的字符串参数中文数据变成???问题解决:
分析问题原因
前端调用接口,返回用户信息,中文信息全部返回了???,起初以为是接口字符串数据转换编码的问题,于是做了如下操作:
服务端增加 StringHttpMessageConverter配置,指定接口返回数据格式
@Configuration public class WebAppConfigurer implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { StringHttpMessageConverter converter = new StringHttpMessageConverter(); List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(new MediaType("application","json",Charset.forName("UTF-8"));); converter.setSupportedMediaTypes(mediaTypes); converters.add(converter); } }
此方式配置完成后,仍然未解决问题,于是决定在方法上限制接口返回数据格式
方法上限制接口参数格式,接口方法上添加 produces={"application/json;charset=UTF-8"}
@PostMapping(value = "/test",produces={"application/json;charset=UTF-8"}) public ResultVo testMethod(@RequestBody String jsonData) {
return new ResultVo();
}
按照以上操作后,发现调用接口接收到中文字符串参数还是 ???
想到数据是通过FeignClient调用服务获取的,调试时发现调用方法时传递 json参数为中文,到了服务端接收到的参数,中文都变成了???,于是使用接口工具,直接调用此接口,传递了json参数,发现接收到的参数不是???了
于是分析,可能是FeignClient出现了问题,找到了相关资料,Feign调用接口时需要在FeignClient设置指定处理请求的提交内容类型:
在FeignClient调用的接口方法上,添加如下参数: produces=MediaType.APPLICATION_JSON_UTF8_VALUE,consumes = "application/json;charset=UTF-8"
@FeignClient("user-service")
public interface UserService {
@PostMapping(value="/test",produces=MediaType.APPLICATION_JSON_UTF8_VALUE,consumes = "application/json;charset=UTF-8")
ResultVo testMethod(@RequestBody String jsonData);
}
修改后重新编译启动,测试通过, ???乱码问题解决.
相关参数说明:
1、consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
2、produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示