问题:使用hutool包调用第三方接口,返回的信息涉及到中文是乱码,并且调用其它接口又是正常的。
String result = HttpRequest.get(url).header("X-Token", getToken()).execute().body();
返回结果如图:
分析:首先: 确定的是只有当返回值是 String时才会出现中文乱码,而当返回值是Map<String, Object>或者是其它类型时,并没有中文乱码的出现.
原因: spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list或其它则使用 MappingJacksonHttpMessageConverter,返回string,则使用 StringHttpMessageConverter,而这个convert使用的是字符集是iso-8859-1,而且是final的。所以在当返回json中有中文时会出现乱码。
解决办法:
添加对应的Accept返回格式编码数据。
String result = HttpRequest.get(url).header("X-Token", getToken()).header("Accept","text/html;charset=UTF-8;").contentType("application/json").execute().body();
正常结果: