关于RestTemplate中的Get请求

 更新时间:2023年07月06日 11:03:07   作者:chengqiuming  
这篇文章主要介绍了关于RestTemplate中的Get请求,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

RestTemplate的Get请求

getForEntity系列函数

函数原型:

1 getForEntity(String url,Class responseType,Object ... urlVariables)
2 getForEntity(String url,Class responseType,Map urlVariables)
3 getForEntity(URI url,Class responseType)

实例:

public String hello() {
    StringBuilder result = new StringBuilder();
    // GET
    //方式一
    result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody()).append("
");
    //方式二
    result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={1}", String.class, "didi").getBody()).append("
");
    //方式三
    Map<String, String> params = new HashMap<>();
    params.put("name", "dada");
    result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={name}", String.class, params).getBody()).append("
");
    //方式四
    UriComponents uriComponents = UriComponentsBuilder.fromUriString(
            "http://HELLO-SERVICE/hello1?name={name}")
            .build()
            .expand("dodo")
            .encode();
    URI uri = uriComponents.toUri();
    result.append(restTemplate.getForEntity(uri, String.class).getBody()).append("
");
}

getForObject系列函数

函数原型

1 getForObject(String url,Class responseType,Object ... urlVariables)
2 getForObject(String url,Class responseType,Map urlVariables)
3 getForObject(URI url,Class responseType)

实例:

RestTemplate restTemplate = new RestTemplate();
String result=restTemplate.getForObject(uri,String.class)
//当body是一个User对象时,可以直接这样实现:
RestTemplate restTemplate = new RestTemplate();
User result=restTemplate.getForObject(uri,User.class)

RestTemplate get请求多参数 使用记录和简单封装

使用RestTemplate发送get请求时,如果有多个参数拼接起来会比较麻烦,在此做个简单的封装。

接收端Controller

@GetMapping(value = "/get/getByKeyword", produces = {"application/json;charset=UTF-8"})
    public String getByKeyword (@RequestParam(name = "name") String name,@RequestParam(name = "keyword") String keyword) {
        System.out.println(name+","+keyword);
        return name+","+keyword;
    }

发送请求

package xxx;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.springframework.web.client.RestTemplate;
public class RestTemplateUtil {
    public static void main(String[] args) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("name", "中国");
        paramMap.put("keyword", "YYDS");
        String aa = getForObject("http://127.0.0.1:8888/get/getKeyword", paramMap);
        System.out.println(aa);
    }
    /**
     * 封装的get请求,暂时只支持map传参,并且value只支持基本类型和String
     *
     * @param url
     * @param object
     * @return
     */
    private static String getForObject(String url, Object object) {
        StringBuffer stringBuffer = new StringBuffer(url);
        if (object instanceof Map) {
            Iterator iterator = ((Map) object).entrySet().iterator();
            if (iterator.hasNext()) {
                stringBuffer.append("?");
                Object element;
                while (iterator.hasNext()) {
                    element = iterator.next();
                    Map.Entry<String, Object> entry = (Map.Entry) element;
                    //过滤value为null,value为null时进行拼接字符串会变成 "null"字符串
                    if (entry.getValue() != null) {
                        stringBuffer.append(element).append("&");
                    }
                    url = stringBuffer.substring(0, stringBuffer.length() - 1);
                }
            }
        } else {
            throw new RuntimeException("url请求:" + url + "请求参数有误不是map类型");
        }
        System.out.println("url请求:" + url);
        return new RestTemplate().getForObject(url, String.class);
    }
}

控制台输出日志

url请求:http://127.0.0.1:8888/get/getKeyword?name=中国&keyword=YYDS
log4j:WARN No such property [datePattern] in org.apache.log4j.ConsoleAppender.
中国,YYDS

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java中处理json各种各样的转换方法(推荐)

    java中处理json各种各样的转换方法(推荐)

    下面小编就为大家分享一篇java中处理json各种各样的转换方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • SpringCloud连接不上远程Nacos问题排查

    SpringCloud连接不上远程Nacos问题排查

    本文主要介绍了SpringCloud连接不上远程Nacos问题排查,可能是因为未开放端口,或集群内部通信异常等,下面就来介绍一下问题解决,感兴趣的可以了解一下
    2024-06-06
  • spring cache注解@Cacheable缓存穿透详解

    spring cache注解@Cacheable缓存穿透详解

    这篇文章主要介绍了spring cache注解@Cacheable缓存穿透详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java线程的6种状态及切换教程

    Java线程的6种状态及切换教程

    这篇文章主要给大家介绍了关于Java线程的6种状态及切换教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Kafka producer端开发代码实例

    Kafka producer端开发代码实例

    这篇文章主要介绍了Kafka producer端开发代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • IDEA中打jar包的2种方式(Maven打jar包)

    IDEA中打jar包的2种方式(Maven打jar包)

    这篇文章主要给大家介绍了关于IDEA中打jar包的2种方式,分别是不使用Maven直接打Jar包与使用Maven打jar包的两种方法,需要的朋友可以参考下
    2021-05-05
  • Java中的锁ReentrantLock详解

    Java中的锁ReentrantLock详解

    这篇文章主要介绍了Java中的锁ReentrantLock详解,ReentantLock是java中重入锁的实现,一次只能有一个线程来持有锁,包含三个内部类,Sync、NonFairSync、FairSync,需要的朋友可以参考下
    2023-09-09
  • mybatis @Alias注解在类上的使用方式(推荐)

    mybatis @Alias注解在类上的使用方式(推荐)

    这篇文章主要介绍了mybatis @Alias注解在类上的使用方式,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • Mybatis传list参数调用oracle存储过程的解决方法

    Mybatis传list参数调用oracle存储过程的解决方法

    怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?接下来通过本文给大家介绍Mybatis传list参数调用oracle存储过程,需要的朋友可以参考下
    2017-03-03
  • Java实现随机抽奖的三种方法

    Java实现随机抽奖的三种方法

    在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者,以下将给出几种常见的随机抽奖实现方式,需要的朋友可以参考下
    2024-09-09

最新评论