Spring远程调用HttpClient/RestTemplate的方法

时间:2021-05-20

一、HttpClient

两个系统间如何互相访问?两个tomcat上的项目如何互相访问?

采用HttpClient实现跨系统的接口调用。

介绍:

官网:http://hc.apache.org/index.html

现在也叫:HttpComponents

HttpClient可以发送get、post、put、delete、...等请求

使用:

导入坐标

<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4</version></dependency>//1、使用HttpClient发起Get请求public class DoGET { public static void main(String[] args) throws Exception { // 创建Httpclient对象,相当于打开了浏览器 CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建HttpGet请求,相当于在浏览器输入地址 HttpGet httpGet = new HttpGet("http:///s?wd=java"); CloseableHttpResponse response = null; try { // 执行请求 response = httpclient.execute(httpGet); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { // 解析响应数据 String content = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println(content); } } finally { if (response != null) { response.close(); } httpclient.close(); } }} //3、使用HttpClient发起POST请求public class DoPOST { public static void main(String[] args) throws Exception { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建http POST请求 HttpPost httpPost = new HttpPost("http://ameValuePair("fromerr", "8bDnUWwC")); // 构造一个form表单式的实体 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters); // 将请求实体设置到httpPost对象中 httpPost.setEntity(formEntity); CloseableHttpResponse response = null; try { // 执行请求 response = httpclient.execute(httpPost); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { // 解析响应体 String content = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println(content); } } finally { if (response != null) { response.close(); } // 关闭浏览器 httpclient.close(); } }}

二、RestTemplate

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法

HTTP开发是用apache的HttpClient开发,代码复杂,还得操心资源回收等。代码很复杂,冗余代码多。

导入坐标

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

创建RestTemplate对象

@Configuration//加上这个注解作用,可以被Spring扫描public class RestTemplateConfig { /** * 创建RestTemplate对象,将RestTemplate对象的生命周期的管理交给Spring * @return */ @Bean public RestTemplate restTemplate(){ RestTemplate restTemplate = new RestTemplate(); //主要解决中文乱码 restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); return restTemplate; }}

RestTempController

import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; @RestController@RequestMapping("/consumer")public class ConsumerController { // 从Spring的容器中获取restTemplate @Resource private RestTemplate restTemplate; /** * 通过Get请求,保存数据 */ @GetMapping("/{id}") public ResponseEntity<String> findById(@PathVariable Integer id){ //发起远程请求:通过RestTemplate发起get请求 ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:8090/goods2/1", String.class); System.out.println("entity.getStatusCode():"+entity.getStatusCode()); System.out.println(entity.getBody()); return entity; } /** * 通过Post请求,保存数据 */ @PostMapping public ResponseEntity<String> saveGoods(@RequestBody Goods goods){ //通过RestTemplate发起远程请求 /** * 第一个参数:远程地址URI * 第二个参数:数据 * 第三个参数:返回值类型 */ ResponseEntity<String> entity = restTemplate.postForEntity("http://localhost:8090/goods2", goods, String.class); System.out.println("entity.getStatusCode():"+entity.getStatusCode()); System.out.println(entity.getBody()); return entity; } @PutMapping public ResponseEntity<String> updateGoods(@RequestBody Goods goods){ restTemplate.put("http://localhost:8090/goods2",goods); return new ResponseEntity<>("修改成功", HttpStatus.OK); } @DeleteMapping("/{id}") public ResponseEntity<String> deleteById(@PathVariable Integer id){ restTemplate.delete("http://localhost:8090/goods2/"+id); return new ResponseEntity<>("删除成功", HttpStatus.OK); }}

只用maven不用springboot框架时只需要导入依赖到pom文件

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId></dependency>

直接newRestTemplate()对象使用即可

到此这篇关于Spring远程调用HttpClient/RestTemplate的方法的文章就介绍到这了,更多相关Spring远程调用HttpClient/RestTemplate内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章