MultiValueMap在restTemplate的一次错误使用
问题:post请求一个三方接口时,restTemplate请求,三方接口一直报错“网络错误”。
以为请求头Content-Type参数不对(三方要求”application/json;charset=UTF-8“,但是org.springframework.http.MediaType.APPLICATION_JSON_UTF8,在spring5.2已经废弃了,理由是现在主流的浏览器已经符合规范并正确解释UTF-8特殊字符),尝试几种还是一样报错。换了一个http请求发送框架,hultool的HttpUtil.post(),又是正常的。为了探明原因,只好用打出http的所有信息来分析了。
发现:restTemplate请求体的json数据value值,都是集合格式。
{ "name": ["tom"], "age": ["18"] }
hultool的HttpUtil.post()请求体数据为正常的json格式
{ "name": "tom", "age": "18" }
这里才是请求出错的根本原因。
解决:restTemplate的HttpEntity对象构建不能用MultiValueMap,改用普通的HashMap。
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(publicParam, headers);
String response = restTemplate.postForObject(url, httpEntity, String.class);
总结:MultiValueMap的value都是list类型,用在此处不对。
有文章说restTemplate提交表单时必须用MultiValueMap,出处:https://blog.csdn.net/qq_33589510/article/details/121527830
另附一篇MultiValueMap正确使用的文章,https://www.cnblogs.com/PocketHeart/p/15314345.html