以form表单的形式传递参数给rest接口

 /**
     * 以传统form表单的方式提交参数(并不是以json格式提交)
     *
     * @param url          提交的rest url
     * @param paramMap     body参数
     * @param responseType 返回类型
     * @param <T>
     * @return
     */
    public <T> T postForFormObject(String url, Map<String, Object> paramMap, Class<T> responseType, Object... uriVariables) {
        long astart = System.currentTimeMillis();
        LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
        T result = null;
        for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
            map.add(entry.getKey(), String.valueOf(entry.getValue()));
            logger.info("key: {} value:{}",entry.getKey(),String.valueOf(entry.getValue()));
        }
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<LinkedMultiValueMap<String, String>> httpEntity = new HttpEntity<LinkedMultiValueMap<String, String>>(map, httpHeaders);
        try {
            if (null != uriVariables) {
                result = restTemplate.postForObject(url, httpEntity, responseType,uriVariables);
            }else{
                result = restTemplate.postForObject(url, httpEntity, responseType);
            }
        }catch (Exception e){
            logger.error("", e);
        } finally {
            long aend = System.currentTimeMillis();
            logger.debug("url: {} invoke restful time consuming:{}", url, aend - astart);

            log(url + "/" + (StringUtils.isEmpty(uriVariables) ? "" : JsonUtil.writeObjectValueAsString(uriVariables)), null, result);
        }

        return result;
    }
有时候调用rest接口的时候,接口接收的参数并不是以json格式接收,而是以传统表单数据的格式接收,这时候他这contetentType就不是json,这时候需要通过封装一个HttpEntity再组装好相关参数提交httpEntity,参数的组装用的是LinkedMultiValueMap 貌似HttpEntity不接收value是object,所以String.valueOf将value值转成了String,这样就可以给rest接口传递表单的数据了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值