zoukankan      html  css  js  c++  java
  • 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", "测试短信内容");
    }
  • 相关阅读:
    C#使用各种时间戳及转换
    Rust借用机制的理解分析
    C# QRCoder 生成二维码
    Android 使用 JCIFS 访问共享文件
    Linux samba 创建共享盘
    WPF 等待对话框
    IIS实现Nginx功能:转发
    js jquery ajax跨域
    依赖注入
    .net standard
  • 原文地址:https://www.cnblogs.com/myf008/p/8893729.html
Copyright © 2011-2022 走看看