首页 > 其他分享 >在Spring Boot应用中使用RestTemplate类发送不同的HTTP GET请求(带请求头、不带请求头)

在Spring Boot应用中使用RestTemplate类发送不同的HTTP GET请求(带请求头、不带请求头)

时间:2024-05-28 18:25:33浏览次数:22  
标签:HTTP 请求 GET url RestTemplate request headers String

原文链接:https://www.cnblogs.com/windyWu/p/16872871.html

在本文中,你将学会在Spring Boot应用中使用RestTemplate类发送不同的HTTP GET请求。

简单GET请求

发送GET HTTP请求,可以使用getForObject()getForEntity()方法。
如下示例,使用getForObject()方法获取JSON字符串形式的用户信息:

// request url
String url = "https://jsonplaceholder.typicode.com/posts/1";

// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();

// make an HTTP GET request
String json = restTemplate.getForObject(url, String.class);

// print json
System.out.println(json);

 

带参数的GET请求

发送请求参数时,可以把参数直接追加到URL尾部,或者使用占位符。
示例如下,将请求参数追加到URL尾部的GET请求:

// request url
String url = "https://google.com/search?q=java";

// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();

// make an HTTP GET request
String html = restTemplate.getForObject(url, String.class);

 

相似的,在URL里增加占位符的方式携带请求参数:

// request url
String url = "https://google.com/search?q={q}";

// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();

// make an HTTP GET request
String html = restTemplate.getForObject(url, String.class, "java");

 

带参数和头的GET请求

在HTTP GET请求中携带自定义的请求头,应该使用RestTemplate类提供的通用的exchange()方法。
如下GET请求携带了请求参数和请求头:

// request url
String url = "https://jsonplaceholder.typicode.com/posts/{id}";

// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();

// create headers
HttpHeaders headers = new HttpHeaders();

// set `Content-Type` and `Accept` headers
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

// example of custom header
headers.set("X-Request-Source", "Desktop");

// build the request
HttpEntity request = new HttpEntity(headers);

// make an HTTP GET request with headers
ResponseEntity<String> response = restTemplate.exchange(
        url,
        HttpMethod.GET,
        request,
        String.class,
        1
);

// check response
if (response.getStatusCode() == HttpStatus.OK) {
    System.out.println("Request Successful.");
    System.out.println(response.getBody());
} else {
    System.out.println("Request Failed");
    System.out.println(response.getStatusCode());
}

 


}

使用Basic Authentication的GET请求

如下示例,在RestTemplate GET请求中携带basic authentication。

// request url
String url = "https://jsonplaceholder.typicode.com/posts";

// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();

// create headers
HttpHeaders headers = new HttpHeaders();

// add basic authentication header
headers.setBasicAuth("username", "password");

// build the request
HttpEntity request = new HttpEntity(headers);

// make an HTTP GET request with headers
ResponseEntity<String> response = restTemplate.exchange(
        url,
        HttpMethod.GET,
        request,
        String.class
);

// check response
if (response.getStatusCode() == HttpStatus.OK) {
    System.out.println("Request Successful.");
    System.out.println(response.getBody());
} else {
    System.out.println("Request Failed");
    System.out.println(response.getStatusCode());
}

 

将响应映射到Java对象的GET请求

使用RestTemplate,可以将JSON形式的响应直接映射为Java对象。首先创建一个简单的实体类:
Post.java

public class Post implements Serializable {

    private int userId;
    private int id;
    private String title;
    private String body;

    public Post() {
    }

    public Post(int userId, int id, String title, String body) {
        this.userId = userId;
        this.id = id;
        this.title = title;
        this.body = body;
    }

    // getters and setters, equals(), toString() .... (omitted for brevity)
}

现在,exchange()方法可以使用Post类作为响应类型了。

// request url
String url = "https://jsonplaceholder.typicode.com/posts/1";

// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();

// create headers
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

// build the request
HttpEntity request = new HttpEntity(headers);

// make an HTTP GET request with headers
ResponseEntity<Post> response = restTemplate.exchange(
        url,
        HttpMethod.GET,
        request,
        Post.class
);

// check response
if (response.getStatusCode() == HttpStatus.OK) {
    System.out.println("Request Successful.");
    System.out.println(response.getBody());
} else {
    System.out.println("Request Failed");
    System.out.println(response.getStatusCode());
}

 

标签:HTTP,请求,GET,url,RestTemplate,request,headers,String
From: https://www.cnblogs.com/isme-zjh/p/18218585

相关文章

  • nginx中$host、$http_host、$proxy_host的区别
    nginx中$host、$http_host、$proxy_host的区别变量 是否显示端口 值$host 不显示端口 浏览器请求的ip,不显示端口$http_host 端口存在则显示 浏览器请求的ip和端口号$proxy_host 默认80端口不显示,其它显示 被代理服务的ip和端口号配置nginx代理服务后不设置proxy_set_head......
  • eclipse转IDEA出现Cannot resolve method 'getContextPath()'
    如图 解决方法:file——》projetStu…… module——》项目——》Dependence 选tomcat applyok解决  参考——https://blog.csdn.net/ZhaZha__Hui/article/details/109551716......
  • HTTP的系统登录页面,如何避免明文传输用户密码?
    系统登录页面,作为开发人员,应该没有陌生的吧。就像下面这样子。 点击登录,调用/login接口。来看下面截图中的载荷(payload)数据,其中,密码password的值是明文。 如果你的站点使用的是HTTPS协议,配置了有效的SSL证书,那将很好。HTTPS通过SSL/TLS协议建立安全的加密通信通道,确保......
  • IP地址证如何实现HTTPS访问?(内网IP、公网IP)
    不能提供域名只能提供IP地址也可以通过部署特定的SSL证书来实现HTTPS访问,这一特定的SSL证书就是IP地址证书。市面上常见的SSL证书多为以域名申请的,以IP地址来申请的SSL证书相对较少见。下面是IP地址证书的申请方法和流程:1选择证书品牌选择能支持公网和内网IP申请SSL证......
  • 推荐丨网站https访问也能免费实现了
    2022年Verizon数据泄露调查报告指出,当年75%的社会工程攻击涉及网络钓鱼,仅2022年一年就有超过33万个账户被网络钓鱼,网络钓鱼占整体社会工程攻击的41%。但是也不能将所有责任归咎于运维人员,因为薄弱的安全意识建设及宣教是大部分漏洞利用的原因。在进行网络信息交互的......
  • 创建一个配置为信任所有HTTPS连接的RestTemplate实例,不验证服务器的SSL证书。这个示
    这个配置类使用背景:可参考博客:springboot使用restTemplate发送https请求忽略ssl证书https://jsonll.blog.csdn.net/article/details/129191580?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-1......
  • 多个存储权限管理的好处,你get到了吗?
    多个存储权限管理是NAS(网络附加存储)系统中的一个重要功能,它允许管理员对存储在NAS上的文件和文件夹进行细粒度的访问控制。以下是实现多个存储权限管理的关键点:1.用户和用户组:创建不同的用户账户和用户组,以便于根据不同的用户或用户组设置不同的访问权限。2.访问权限类型:定义......
  • 使用 Flask 框架编写的一个简单的 Python POST和GET接口
    安装FlaskpipinstallFlask 使用python实现POST接口fromflaskimportFlask,request,jsonifyapp=Flask(__name__)@app.route('/test',methods=['POST'])defsubmit():#获取JSON请求体data=request.get_json()#从请求体中提取参数......
  • Django 接收用户请求并通过HTTP回应
    准备工作python版本:3.10(本人的)Django版本:3.2.12(LTS长期支持版)注意:不同Django所对应的python版本是有要求的,建议事先查找自己的python版本,Django建议下载LTS长期支持版的安装:python3 //查看版本(在window用python命令)sudopip3installdjango[版......
  • (转)getconf命令相关信息概要
    原文:https://blog.csdn.net/yes_is_ok/article/details/104537934遇到一个命令发现没遇到过,就记录一下,顺便解析这个命令:getconf_NPROCESSORS_ONLN表示内核数量是多少个make-j$(getconf_NPROCESSORS_ONLN)表示有多少个核数就运行多少个任务详细解析如下:我们时常需要查询系统......