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)类型中包含该指定类型才返回

     

posted @   fy_qxl  阅读(2297)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示