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 @ 2022-04-22 14:40  fy_qxl  阅读(1872)  评论(0编辑  收藏  举报