RestTemplate传递参数无法接收的问题

今天在用RestTemplatet发送post请求传参的时候发现参数怎么也收不到,尝试了好多办法,网上也搜了好多都没解决问题
下面贴一下最后解决的代码

发送端

		RestTemplate restTemplate = new RestTemplate();

        HttpHeaders header = new HttpHeaders();
        header.setContentType(MediaType.APPLICATION_JSON_UTF8);
        
        //我这里request.getHeaderNames()是从别的请求获取的参数,不用关注这里
        Enumeration<String> headers =  request.getHeaderNames();
        while (headers.hasMoreElements()){
            String key = headers.nextElement();
            header.add(key,request.getHeader(key));
        }

		//一定要用MultiValueMap别的不起作用
        MultiValueMap<String, Object> body  = new LinkedMultiValueMap<>();
        Enumeration<String> parameters = request.getParameterNames();
        while (parameters.hasMoreElements()){
            String key = parameters.nextElement();
            if(!targetUrl.equals(key)){
                LinkedList<Object> param = new LinkedList<>();
                param.add(request.getParameter(key));
                body.put(key,param);
            }
        }

        HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(body,header);
        ResponseEntity<String> response = restTemplate.postForEntity(url,entity,String.class);
        return response.getBody();

接收端

有说用@RequestBody也有说用@RequestParam的,我试了我这必须是@RequestBody才能收到值ParamMap是我封装的一个map,方便取值,下面也贴源码了

@PostMapping(value = "/adddjrjh",produces = { "application/json;charset=UTF-8" })
    private R adddjrjh(@RequestBody ParamMap<String,Object> params) throws Exception {
        
        System.out.println(params.getParamter("djrjh"));


        return R.setResult(BAD_SQL_GRAMMAR);
    }

ParamMap

public class ParamMap<K,V> extends LinkedHashMap {

    public String getParamter(String param){

        if(null!=this.get(param)){
            return String.valueOf(((ArrayList)this.get(param)).get(0));
        }else{
            return null;
        }
    }
}

如果你的问题已经解决,很开心能够帮助到你~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值