后端开发7——后端发起HTTP请求
1 创建HTTP请求服务类service——RestService
此处使用了JSONObject类存储返回信息,需要引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
RestService.java
点击展开
package com.wrj.service;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
* 访问远程Http服务
*
* @author wrj
*/
@Service
public class RestService {
@Resource
RestTemplate restTemplate;
/**
* 带参数post访问
* @param url
* @param request:请求参数
* @param responseType:响应包含的数据类型
*
* @author wrj
*/
public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType)
{
return restTemplate.postForEntity(url, request, responseType);
}
/**
* 带参数post访问
* @param url
* @param headers:请求头
* @param jsonParams:请求参数
*
* @author wrj
*/
public JSONObject postJsonRequest(String url, HttpHeaders headers, JSONObject jsonParams)
{
//创建请求实体
HttpEntity<String> entity = new HttpEntity<>(jsonParams.toString(), headers);
//执行post请求,并响应返回字符串
Object restData = restTemplate.postForEntity(url, entity, String.class);
return (JSONObject)JSONObject.toJSON(restData);
}
public JSONObject postJsonRequest(String url, HttpHeaders headers)
{
//创建请求实体
HttpEntity<String> entity = new HttpEntity<>(headers);
//执行post请求,并响应返回字符串
Object restData = restTemplate.postForEntity(url, entity, String.class);
return (JSONObject)JSONObject.toJSON(restData);
}
/**
* 带参数get访问
* @param url
* @param headers:请求头
*
* @author wrj
*/
public JSONObject getJsonRequest(String url, HttpHeaders headers)
{
//执行post请求,并响应返回字符串
return (JSONObject)JSONObject.toJSON(restTemplate.getForEntity(url, String.class));
}
}
2 启动类注入RestTemplate类
SpringBoot项目中RestTemplate无法通过@Autowired注入,需要我们在springboot配置类中注入RestTemplate,也就是在启动类加上RestTemplate的Bean。
参考:https://blog.csdn.net/Toniest4792/article/details/108999646
点击展开
public class demoApplication {
@Autowired
//RestTemplateBuilder
private RestTemplateBuilder builder;
// 使用RestTemplateBuilder来实例化RestTemplate对象,spring默认已经注入了RestTemplateBuilder实例
@Bean
public RestTemplate restTemplate() {
return builder.build();
}
public static void main(String[] args) {
…
}
}
3 controller类中使用HTTP服务
@Autowired
RestService restService;
@RequestMapping("/postTest")
public String postTest(){
try {
/*生成请求链接*/
String getOpenIdUrl = "https://www.runoob.com/docker/docker-tutorial.html ";
//请求头声明请求格式为json
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
/*发起外部http请求*/
JSONObject jsonRestData = restService.postJsonRequest(getOpenIdUrl, headers);
//获取相应数据
String retData = jsonRestData.getObject("body", String.class);
String date= jsonRestData.getJSONObject("headers").getString("date");
return date+"\n "+retData.toString();
}
catch (Exception e){
return e.getMessage();
}
}
4 controller类请求的页面重定向示例
@RequestMapping("/pageRedirect")
public String pageRedirect(HttpServletResponse response) throws IOException {
String verifyUrl = "https://www.runoob.com/docker/docker-tutorial.html";
// 重定向到扫码页面
response.sendRedirect(verifyUrl);
return "redirect";
}
5 使用OkHttp事项Http请求接口
pom引入依赖
<!--okhttp3 访问远程http服务-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>
使用方法参考: Java请求Http接口-OkHttp(超详细-附带工具类)

浙公网安备 33010602011771号