之前项目一般是使用 HttpClient 进行 api 调用。最近突然想试试 spring 自家封装的 RestTemplate,
//利用 Spring 的 RestTemplate 类向微信 API 发送 GET 请求获取 session_key
private String getSessionKey(String code) {
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + appSecret + "&js_code=" + code + "&grant_type=authorization_code";
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
Map<String, String> response = restTemplate.getForObject(url, Map.class);
return response.get("session_key");
}
没想到第一个小程序服务端获取 openid 的请求直接就翻车了,异常如下:
Could not extract response: no suitable HttpMessageConverter found for response type [classxxxx] and content type [text/plain]
解决方法:替代Feign的解码器,使json解析器可以解析[text/plain]的数据
创建一个WxMappingJackson2HttpMessageConverter类,继承MappingJackson2HttpMessageConverter。并重写构造方法
public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public WxMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
setSupportedMediaTypes(mediaTypes);
}
}