SpringCloud学习之RestTemplate

it2024-08-08  40

SpringCloud学习之RestTemplate

RestTemplate简介Service-Provider服务实体类 UserEntityDao层 UserMapperService层及其实现Controller层 Service-Consumer服务RestTemplate注入配置UserService调用service-provider接口UserController

RestTemplate简介

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。

Service-Provider服务

该服务主要用于与数据库的交互,查询数据后提供接口给其他服务调用。采用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>

实体类 UserEntity

package com.rui.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import org.springframework.stereotype.Component; import java.io.Serializable; /** * @author WangRui * @date 2020/10/21 10:22 */ @Data @Component @TableName("user") public class UserEntity implements Serializable { @TableId(value = "id",type = IdType.ASSIGN_UUID) private String id; @TableField(value = "username") private String username; @TableField(value = "password") private String password; @TableField(value = "phone") private String phone; @TableField(value = "mail") private String mail; }

Dao层 UserMapper

package com.rui.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.rui.entity.UserEntity; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; /** * @author WangRui * @date 2020/10/21 10:31 */ @Mapper @Component public interface UserMapper extends BaseMapper<UserEntity> { }

Service层及其实现

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 { }

Controller层

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服务

Service-Consumer通过RestTemplate来调用Service-Provider的接口。

RestTemplate注入配置

通过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调用service-provider接口

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

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对微服务间接口的调用

最新回复(0)