RestTemplate 发送 get 请求使用误区 多个参数传值为null(转载)

首先看一下官方文档是怎么描述的,传递多个值的情况(注意例子中用到的@pathParam,一般要用@queryParam)

RestTemplate 实例

@Configuration
public class RestConfiguration {

    @Bean
    @ConditionalOnMissingBean({RestOperations.class, RestTemplate.class})
    public RestOperations restOperations() {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setReadTimeout(5000);
        requestFactory.setConnectTimeout(5000);

        RestTemplate restTemplate = new RestTemplate(requestFactory);

        // 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为 "ISO-8859-1")
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
        while (iterator.hasNext()) {
            HttpMessageConverter<?> converter = iterator.next();
            if (converter instanceof StringHttpMessageConverter) {
                iterator.remove();
            }
        }
        messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));

        return restTemplate;
    }

}

请求地址

get 请求 url 为

http://localhost:8080/test/sendSms?phone=手机号&msg=短信内容

错误使用

@Autowired
private RestOperations restOperations;

public void test() throws Exception{
    String url = "http://localhost:8080/test/sendSms";

    Map<String, Object> uriVariables = new HashMap<String, Object>();
    uriVariables.put("phone", "151xxxxxxxx");
    uriVariables.put("msg", "测试短信内容");

    String result = restOperations.getForObject(url, String.class, uriVariables);
}

服务器接收的时候你会发现,接收的该请求时没有参数的


正确使用

@Autowired
private RestOperations restOperations;

public void test() throws Exception{
    String url = "http://localhost:8080/test/sendSms?phone={phone}&msg={phone}";

    Map<String, Object> uriVariables = new HashMap<String, Object>();
    uriVariables.put("phone", "151xxxxxxxx");
    uriVariables.put("msg", "测试短信内容");

    String result = restOperations.getForObject(url, String.class, uriVariables);
}

等价于

@Autowired
private RestOperations restOperations;

public void test() throws Exception{
    String url = "http://localhost:8080/test/sendSms?phone={phone}&msg={phone}";

    String result = restOperations.getForObject(url, String.class,  "151xxxxxxxx", "测试短信内容");
}

原文地址:https://www.cnblogs.com/myf008/p/8893729.html

时间: 2024-10-13 22:59:45

RestTemplate 发送 get 请求使用误区 多个参数传值为null(转载)的相关文章

使用RestTemplate发送post请求

最近使用RestTemplate发送post请求,遇到了很多问题,如转换httpMessage失败.中文乱码等,调了好久才找到下面较为简便的方法: RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); head

JQuery发送ajax请求不能用数组作为参数

JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){        var selectedMembers = document.getElementsByName('selectedMembers');        var cwIds = new Array(); //定义数组        for(var i=0;i<selectedMembers.length;i++){  

php 发送post请求且header中带参数bug调试

  通常get方式header中带参数如下通过curl调用即可: function send_get_curl_header($url, $data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,

jenkins构建自动执行jmeter 发送http请求,中间有替换参数路径

#在构建目录下创建jmeter目录,在这个目录下面执行jmeter性能测试mkdir -p $WORKSPACE/target/apache-jmeter-3.1/#复制jmeter文件到执行测试目录/bin/cp -r /app/jmeter/apache-jmeter-3.1/* $WORKSPACE/target/apache-jmeter-3.1/ #复制参数文件到jmeter bin目录下cp $WORKSPACE/*.csv $WORKSPACE/target/apache-jmet

NSURLConnection发送GET请求

1 // ViewController.m 2 // 04-掌握-NSURLConnection发送GET请求 3 // 4 // Created by xiaomage on 16/2/22. 5 // Copyright ? 2016年 小码哥. All rights reserved. 6 // 7 8 #import "ViewController.h" 9 10 @interface ViewController ()<NSURLConnectionDataDelega

Httpclient发送json请求

一.Httpclient发送json请求 public String RequestJsonPost(String url){    String strresponse = null;    try{        HttpClient hc = new DefaultHttpClient();       HttpPost hp = new HttpPost(url);       JSONObject jsonParam = new JSONObject();       jsonPara

发送post请求的接口

一.简介 所有系统或者软件.网站都是从登录开始,所以首先介绍的第一个post请求是登录. 二.help函数 学习一个新的模块捷径,直接用help()函数查看相关注释和案例内容 for example: import requests help(requests) 三.发送post请求的接口(dict参数) 1.用python提供的发送post请求的接口案例,稍稍地做个简单修改,就可以发个简单的post 请求 2.像官方文档给出的案例将payload 参数是字典类型(dict),传到如下图的 fo

使用RestTemplate发送multipart/form-data格式的数据

现有业务场景需要使用RestTemplate发送一个post请求,请求格式为multipart/form-data的,可以使用一下方法 public Object sendRequest(Object obj) { RestTemplate restTemplate = new RestTemplate(); //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FO

springboot发送http请求

springboot中实现http请求调用api 创建发送http请求service层 import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; /**  * @Author 冯战魁  * @Da