后端开发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(超详细-附带工具类)

posted @ 2024-06-18 22:53  wrj的博客  阅读(0)  评论(0)    收藏  举报