首页 > 其他 > 详细

RestTemplate:使用 Map 传递参数

时间:2020-04-28 13:58:27      阅读:187      评论:0      收藏:0      [点我收藏+]

环境

  1. jdk 7
  2. spring 4.3.24.RELEASE

原因

在使用 RestTemplate 的过程中,使用 java.util.HashMap 传递参数一直不生效。根据 这里 的说法,需要使用 MultiValueMap 和 其实现类 LinkedMultiValueMap。

分析

下面从源码来看,为什么 HashMap 不生效而 LinkedMultiValueMap 可以生效。

debug 源码

跟着源码一直走下去,可以发现一个关键的类:FormHttpMessageConverter,这个类的 canWrite 方法如下:

public boolean canWrite(Class<?> clazz, MediaType mediaType) {
    if (!MultiValueMap.class.isAssignableFrom(clazz)) {
        return false;
    }
    if (mediaType == null || MediaType.ALL.equals(mediaType)) {
        return true;
    }
    for (MediaType supportedMediaType : getSupportedMediaTypes()) {
        if (supportedMediaType.isCompatibleWith(mediaType)) {
            return true;
        }
    }
    return false;
}

在这里检查了请求中传递的类型是否实现了 MultiValueMap,所以不是这个类型的不能被处理。
java.util.HashMap 不是 MultiValueMap 类型,所以不能被处理。

RestTemplate:使用 Map 传递参数

原文:https://www.cnblogs.com/jiangbo44/p/12793487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!