看这个学的
https://www.bilibili.com/video/BV1Zf4y1U7p5?from=search&seid=9719059667753019566&spm_id_from=333.337.0.0
也可以参考下这个(几种写法)
https://blog.csdn.net/u012702547/article/details/77917939
请求头的写法参考这个
https://zhuanlan.zhihu.com/p/151984334
配置文件可以参考这个:
https://www.jianshu.com/p/95680c1eb6e0
请求配置文件
package com.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class Restemconnfig { @Autowired private RestTemplateBuilder builder; @Bean public RestTemplate restTemplate(){ return builder.build(); } }
-----------------------------------------------------------------------------Get请求发送-----------------------------------------------------------------------------
@Service @Slf4j public class RequestUrlServer { private final String url="http://localhost:8280/tool/aaa"; @Autowired private RestTemplate restTemplate; public User resQuest(){ ResponseEntity<String> responseEntity =restTemplate.getForEntity(url,String.class); log.info("响应: "+responseEntity); // 获取响应体 String body = responseEntity.getBody(); log.info(String.valueOf(body)); // 获取响应码 int Code = responseEntity.getStatusCodeValue(); log.info(String.valueOf(Code)); // 获取请求头 HttpHeaders Headers = responseEntity.getHeaders(); log.info(String.valueOf(Headers)); return null; }
- getForEntity第二个参数String.class表示我希望返回的body类型是String
拼接url 发送请求
private final String url = "http://localhost:8280/tool/{id}";
public Map resQuest() { Map map2=new HashMap(); map2.put("id","aaa"); // 发送请求 ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class,map2);
-----------------------------------------------------------------------------Post请求发送-----------------------------------------------------------------------------
@Service @Slf4j public class RequestUrlServer { private final String url = "http://localhost:8380/tool/aaa"; @Autowired private RestTemplate restTemplate; public Map resQuest() {
//请求参数 Map map2=new HashMap(); map2.put("name","aaa"); // 发送请求 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,map2,String.class);
------------------------------------------------------------------------返回值处理方法---------------------------------------------------
// //第一种取值方法 // JSONObject jsonObject = JSONObject.parseObject(body); // log.info("响应体: " + body); // log.info("响应体: " + jsonObject); // log.info("响应体: " + jsonObject.get("name")); // // //第二种取值方法 // Map<String, String> map = JSONObject.<Map<String, String>>parseObject(body, Map.class); // log.info("响应体1: " + map); // //// 第三种映射到类里面 // User user = JSONObject.parseObject(body, User.class); // log.info(user.toString()); 方法分别 返回类型 Map or User 其中User是根据返回的json 来定义 如响应返回 {"name":"张三"} User类为 import lombok.Data; @Data public class User { private String name; }
---------------------------------------------------------------------带上headers请求头 请求的 方法------------------------------------------------------------
public class RequestUrlServer { private final String url = "http://localhost:8380/tool/bbb"; private final String url2 = "http://localhost:8380/tool/aaa"; @Autowired private RestTemplate restTemplate; public int resQuest() { HttpHeaders headers = new HttpHeaders(); headers.set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"); headers.set("cookie", "my_user_id=haha123; UN=1231923;gr_user_id=welcome_yhh;"); // 请求bady参数 Map map2=new HashMap(); map2.put("name","aaa"); // 发送post请求带上heard String response = restTemplate.postForObject(url2, new HttpEntity<>(map2, headers), String.class); log.info("post with selfDefine header: {}", response); //发送Get请求带上heard ResponseEntity<String> response2 = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(null, headers),String.class); log.info("get with selfDefine header: {}", response2);
------------------------------------------------------------统一加上请求头的写法------------------------------------------------------------
public int resQuest() { // 借助拦截器的方式来实现塞统一的请求头 ClientHttpRequestInterceptor interceptor = (httpRequest, bytes, execution) -> { httpRequest.getHeaders().set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"); httpRequest.getHeaders().set("cookie", "my_user_id=haha123; UN=1231923;gr_user_id=interceptor;"); return execution.execute(httpRequest, bytes); }; // 统一加入请求头 restTemplate.getInterceptors().add(interceptor); // 请求bady参数 Map map2=new HashMap(); map2.put("name","aaa"); // 发送post请求带上heard String response2 = restTemplate.postForObject(url2,map2,String.class); log.info("post with selfDefine header: {}", response2); // get请求 String response = restTemplate.getForObject(url, String.class); log.info("get with selfDefine header by Interceptor: {}", response);
-------------------------------------------------------------------接口接收请求头的写法-------------------------------------------------------------------
@PostMapping("/aaa") public User delete_User3 (@RequestBody User user, HttpServletRequest HttpServletRequest) { log.info(String.valueOf(user)); log.info(HttpServletRequest.getHeader("cookie")); return user; }
-----------------------------------------------------------------配置文件 参数---------------------------------
import org.apache.http.client.HttpClient; import org.apache.http.conn.HttpClientConnectionManager; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @Configuration public class RestTemplateConfig { /** * http连接管理器 * @return */ @Bean public HttpClientConnectionManager poolingHttpClientConnectionManager() { /*// 注册http和https请求 Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()) .build(); PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registry);*/ PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); // 最大连接数 poolingHttpClientConnectionManager.setMaxTotal(500); // 同路由并发数(每个主机的并发) poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100); return poolingHttpClientConnectionManager; } /** * HttpClient * @param poolingHttpClientConnectionManager * @return */ @Bean public HttpClient httpClient(HttpClientConnectionManager poolingHttpClientConnectionManager) { HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); // 设置http连接管理器 httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager); /*// 设置重试次数 httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true));*/ // 设置默认请求头 /*List<Header> headers = new ArrayList<>(); headers.add(new BasicHeader("Connection", "Keep-Alive")); httpClientBuilder.setDefaultHeaders(headers);*/ return httpClientBuilder.build(); } /** * 请求连接池配置 * @param httpClient * @return */ @Bean public ClientHttpRequestFactory clientHttpRequestFactory(HttpClient httpClient) { HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); // httpClient创建器 clientHttpRequestFactory.setHttpClient(httpClient); // 连接超时时间/毫秒(连接上服务器(握手成功)的时间,超出抛出connect timeout) clientHttpRequestFactory.setConnectTimeout(5 * 1000); // 数据读取超时时间(socketTimeout)/毫秒(务器返回数据(response)的时间,超过抛出read timeout) clientHttpRequestFactory.setReadTimeout(10 * 1000); // 连接池获取请求连接的超时时间,不宜过长,必须设置/毫秒(超时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool) clientHttpRequestFactory.setConnectionRequestTimeout(10 * 1000); return clientHttpRequestFactory; } /** * rest模板 * @return */ @Bean public RestTemplate restTemplate(ClientHttpRequestFactory clientHttpRequestFactory) { // boot中可使用RestTemplateBuilder.build创建 RestTemplate restTemplate = new RestTemplate(); // 配置请求工厂 restTemplate.setRequestFactory(clientHttpRequestFactory); return restTemplate; } }
接口接收请求的看这儿
https://www.cnblogs.com/kaibindirver/p/15524830.html