SpringCloud之RestTemplate的使用-创新互联

源码

10余年专注成都网站制作,企业网站建设,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于企业网站建设,高端网页制作,对成都铜雕雕塑等多个方面,拥有丰富设计经验。

GitHub

RestTemplate是什么?

RestTemplate是Spring对Http客户端进行封装的一个模板工具类,对常用的Http客户端例如:HttpClient、OKHttp、JDK原生的URLConnection(默认的)都支持。

RestTemplate能做什么?

基于Restful风格可以对远程服务基于http协议进行远程调用

RestTemplate的使用

新建一个父工程,命名为springcloud-eureka01

目录结构如下图:

pom.xml:

org.springframework.boot

spring-boot-starter-parent

2.0.0.RELEASE

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-devtools

runtime

true

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

新建模块,命名为eureka-provider01

目录结构如下图:

pom.xml:

com.wyj

springcloud-eureka01

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-data-jpa

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

runtime

org.projectlombok

lombok

true

ProviderController:

@Controller

public class ProviderController {

@Autowired

private UserService userService;

@RequestMapping(value = "/{id}")

@ResponseBody

public User findById(@PathVariable int id) {

User user = userService.findById(id);

return user;

}

}

UserService:

public interface UserService {

public User findById(int id);

}

UserServiceImpl:

@Service

public class UserServiceImpl implements UserService {

@Autowired

private UserRepository userRepository;

@Override

public User findById(int id) {

Optional userOptional = userRepository.findById(id);

User user = userOptional.get();

return user;

}

}

UserRepository:

public interface UserRepository extends JpaRepository {

}

User:

@Entity

@Data

public class User implements Serializable {

@Id

@GeneratedValue

private int id;

private String name;

private String sex;

private int age;

private String address;

private String phone;

}

application.properties:

server.port=8081

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springcloud-eureka01?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.username=root

spring.datasource.password=root

spring.jpa.show-sql=true

spring.jpa.hibernate.ddl-auto=update

spring.jpa.properties.hibernate.format_sql=true

spring.jpa.properties.hibernate.use_sql_comments=true

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

新建模块,命名为eureka-consumer01

目录结构如下图:

pom.xml:

com.wyj

springcloud-eureka01

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

org.projectlombok

lombok

true

ConsumerController:

@Controller

public class ConsumerController{

@Autowired

private RestTemplate restTemplate;

@RequestMapping(value = "/findById/{id}")

@ResponseBody

public User findById(@PathVariable int id) {

User user = restTemplate.getForObject("http://127.0.0.1:8081/" + id, User.class);

return user;

}无锡×××医院 https://yyk.familydoctor.com.cn/20612/

}

RestConfig:

@Configuration

public class RestConfig {

@Bean

public RestTemplate restTemplate() {

return new RestTemplate();

}

}

User:

@Data

public class User implements Serializable {

private int id;

private String name;

private String sex;

private int age;

private String address;

private String phone;

}

测试使用

分别启动eureka-provider01和eureka-consumer01,启动顺序没关系

浏览器访问http://127.0.0.1:8080

总结

在ConsumerController中,RestTemplate调用远程服务

User user = restTemplate.getForObject("http://127.0.0.1:8081", User.class);

RestTemplate通过getForObject方法传递url地址及实体类的字节码,自动发起请求,接收响应,并且帮我们对响应结果通过SpringMVC内置的Jackson中的ObjectMapper进行json反序列化,最后返回一个User对象

虽然RestTemplate能够调用远程服务,但是这样还存在着很多问题:

1、请求地址http://127.0.0.1:8081/硬编码了,如果更换环境,那么需要更改大量的代码

2、并没有一个中心来控制并管理provider和consumer之间的关系与调用

3、使用RestTemplate调用远程服务代码开发量相对而言大,现在的Demo是业务简单,只需要简单调用getForObject就能获取数据。事实上,RestTemplate还有大量基于Http协议的方法,比如delete()、getForEntity()、getForObject()、put()、headForHeaders()等。但是在后期的SpringCloud学习过程中,Feign作为SpringCloud的核心组件,用于远程服务调用,也是基于Http协议,并且支持注解开发,能够大量减少开发量

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站名称:SpringCloud之RestTemplate的使用-创新互联
文章转载:http://myzitong.com/article/eicoo.html