1 概述:
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
之前的HTTP开发是用apache的HttpClient开发,代码复杂,还得操心资源回收等。代码很复杂,冗余代码多。
导入坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- application.properties
server.port=8090
pom.xml
- 使用IDEA创建SpringBoot项目
https://blog.csdn.net/qq_44509920/article/details/107738198
2 服务端对接
3 创建RestTemplate对象
创建实体类Goods
package com.czxy.ssm.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//相当于拥有了getter、setter、toString方法
@AllArgsConstructor//全参构造
@NoArgsConstructor//空参构造
public class Goods {
public Integer id;
private String name;
private String image;
private Double price;
}
- 第一步:创建RestTemplate类,在类中创建RestTemplate对象
package com.czxy.ssm.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* RestTemplate工具类,主要用来提供RestTemplate对象
*/
@Configuration//加上这个注解作用,可以被Spring扫描
public class RestTemplateConfig {
/**
* 创建RestTemplate对象,将RestTemplate对象的生命周期的管理交给Spring
*/
@Bean
public RestTemplate restTemplate(){
// RestTemplate restTemplate = new RestTemplate();
//设置中文乱码问题方式一
// restTemplate.getMessageConverters().add(1,new StringHttpMessageConverter(Charset.forName("UTF-8")));
// 设置中文乱码问题方式二
// restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 支持中文编码
return new RestTemplate();
}
}
- 第二步:创建RestTempController,注入RestTemplate
package com.czxy.ssm.controller;
import com.czxy.ssm.pojo.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
/**
* 本项目不连接数据库,通过RestTemplate发出get、post、put、delete请求,
* 请求Goods-project项目中controller的方法
*/
@RestController
@RequestMapping("/rest")
public class RestTempController {
// 从Spring的容器中获取restTemplate
@Autowired
private RestTemplate restTemplate;
/**
* 通过/id查询
* http://localhost:8090/goods2 -->分页查找
*/
@GetMapping("/{id}")
public ResponseEntity<String> findByPage(@PathVariable Integer id){
/**
* 第一个参数:url
* 第二个参数:返回值类型
*/
ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:8080/goods2/"+id, String.class);
System.out.println("状态码:"+entity.getStatusCode());
System.out.println("响应体"+entity.getBody());
return ResponseEntity.ok(entity.getBody());
}
/**
* 添加数据
*/
@PostMapping
public ResponseEntity<String> addGoods(@RequestBody Goods goods){
/**
* 第一个参数:url
* 第二个参数:数据
* 第三个参数:返回值类型
*/
ResponseEntity<String> entity = restTemplate.postForEntity("http://localhost:8080/goods2", goods, String.class);
return entity;
}
/**
* 修改数据
*/
@PutMapping
public ResponseEntity<String> updateGoods(@RequestBody Goods goods){
// 第一个参数:url
// 第二个参数:对象,数据
restTemplate.put("http://localhost:8080/goods2",goods);
// return new ResponseEntity<>("成功", HttpStatus.OK);
return ResponseEntity.ok("修改成功");
}
/**
* 根据/id删除
*/
@DeleteMapping("/{id}")
public ResponseEntity<String> deleteGoods(@PathVariable("id") Integer id){
restTemplate.delete("http://localhost:8080/goods2/"+id,String.class);
return ResponseEntity.ok("删除成功");
}
}
-
第三步:采用postman测试
-
查
-
增
-
改
-
删