RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。
该服务主要用于与数据库的交互,查询数据后提供接口给其他服务调用。采用Mybatis-Plus进行数据库操作。框架MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 mybatis-plus-boot-starter依赖
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.0</version> </dependency>UserService.java
package com.rui.service; import com.baomidou.mybatisplus.extension.service.IService; import com.rui.entity.UserEntity; /** * @author WangRui * @date 2020/10/21 10:33 */ public interface UserService extends IService<UserEntity> { }UserServiceImpl.java
package com.rui.serviceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.rui.dao.UserMapper; import com.rui.entity.UserEntity; import com.rui.service.UserService; import org.springframework.stereotype.Service; /** * @author WangRui * @date 2020/10/21 10:34 */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper,UserEntity> implements UserService { }UserController.java
package com.rui.controller; import com.alibaba.fastjson.JSON; import com.rui.entity.UserEntity; import com.rui.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author WangRui * @date 2020/10/21 10:36 */ @RestController @RequestMapping(value = "/user") public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/selectAll") public String selectAll(){ List<UserEntity> list = userService.list(); return JSON.toJSONString(list); } }搭建完成后,以Postman通过http://localhost:8082/user/selectAll调用可以获取数据,调用成功
Service-Consumer通过RestTemplate来调用Service-Provider的接口。
通过RestTemplateConfig.java实现RestTemplate的配置,创建及注入Spring容器
RestTemplateConfig.java
package com.rui.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; /** * @author WangRui * @date 2020/10/21 14:07 */ @Configuration public class RestTemplateConfig { @Autowired private RestTemplateBuilder builder; @Bean public RestTemplate restTemplate(){ builder.setConnectTimeout(20*1000) .setReadTimeout(60*1000); return builder.build(); } }UserService.java
package com.rui.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; /** * @author WangRui * @date 2020/10/21 14:29 */ @Service public class UserService { @Autowired private RestTemplate restTemplate; public String selectAll(){ return restTemplate.getForObject("http://localhost:8082/user/selectAll",String.class); } }UserController.java
package com.rui.controller; import com.rui.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author WangRui * @date 2020/10/21 14:32 */ @RestController @RequestMapping(value = "/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/selectAll") public String selectAll(){ return userService.selectAll(); } }创建完成后,通过postman调用localhost:8083/user/selectAll, 两者调用的结果一致,因此实现了RestTemplate对微服务间接口的调用