在实际使用SpringBoot开发项目的过程中,后端服务经常会遇到跨模块访问的需求,这就需要我们的服务接口有同一的开发规范,这样在跨模块调用时才能更方便、高效。而Spring Boot也为我们创建Web服务提供了非常强大的组件化支持,简单而方便,我们一起来看一下。
在当下的分布式系统及微服务架构中,RESTful风格是一种非常流行的Web服务表现方式,RESTful,即Representational State Transfer,表述性状态转移,其本质上只是一种架构风格而不是一种规范。
RESTful架构风格把位于服务器端的访问入口看作一个资源,每个资源都会使用URI(Universal Resource Identifier,统一资源标识符)标识得到一个唯一的地址,且在传输协议上使用标准的HTTP方法,如GET、PUT、POST和DELETE。
@GetMapping/@PostMapping/@PutMapping/@DeleteMapping('/')
:Spring Boot2引入,RESTful风格的请求注解,后跟具体的请求路径,其含义相当于@RequestMapping注解并默认使用了RequestMethod.GET等指定的HTTP方法。
@RequestMapping('/')
:后跟url可以指定接口的具体路径,可以指定路径信息、请求方式、和内容类型等
@RequestMapping
注解中的produces
属性来设置这个属性。 @RequestMapping(value = "accounts", produces="application/json")
@PathVariable
:该注解用于获取路径参数,即从url/{id}
这种形式路径中获取{id}
参数的值
@GetMapping(value = "/{id}")
public Account getAccountById(@PathVariable("id") String id) {
Account account = accountService.getAccountById(id);
return account;
}
@RequestParam
:注解的作用与@PathVariable
注解类似,也是用于获取请求中的参数,面向类似url?id=XX
的形式。
@RequestBody
:注解用来处理content-type
为application/json
类型时的编码内容,通过@RequestBody
注解可以将请求体中的JSON字符串绑定到相应的JavaBean 上。
@PostMapping(value = "/")
public void updateAccount(@RequestBody Account account) {
...
}
@RestController
:该注解相当于是Spring MVC中@Controller
和@ResponseBody
这两个注解的组合,它们会自动返回JSON格式的数据。在使用时,我们只需要返回一个普通的业务对象即可,因为@RestController
注解已经屏蔽了底层实现的复杂性。
服务创建完成后,我们就要对服务进行消费,RestTemplate就是SpringBoot提供的用于访问RESTful服务的客户端模板工具类,位于org.springframework.web.client包中。
创建一个RestTemplate对象,最常见的方法是直接 new 一个实例:
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
RestTemplate类有一个无参和一个有参的构造方法,默认使用无参构造方法,有参的可以用来增强一些功能。
//无参构造函数添加了一批用于实现消息转换的 HttpMessageConverter 对象
public RestTemplate() {
this.messageConverters.add(new ByteArrayHttpMessageConverter());
this.messageConverters.add(new StringHttpMessageConverter());
this.messageConverters.add(new ResourceHttpMessageConverter(false));
this.messageConverters.add(new SourceHttpMessageConverter<>());
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
//省略其他添加 HttpMessageConverter 的代码
}
//有参构造,可以设置一个 ClientHttpRequestFactory 接口。而基于这个接口的各种实现类对 RestTemplate 中的行为进行精细化控制,如设置 HTTP 请求的超时时间等属性。
public RestTemplate(ClientHttpRequestFactory requestFactory) {
this();
setRequestFactory(requestFactory);
}
SpringBoot中使用RESTful接口来统一接口规范,让我们的开发更规范化,并使用RestTemplate消费接口。
RestTemplate模板类来完成对远程 HTTP 端点的访问,其为开发人员提供了一大批有用的工具方法来实现 HTTP 请求的发送以及响应的获取。同时,该模板类还开发了一些定制化的入口供开发人员嵌入,用来实现对 HTTP 请求过程进行精细化管理的处理逻辑,RestTemplate 在设计和实现上毫无疑问是一款非常有效的工具类。
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一些学习资料
需要的小伙伴,可以一键三连,点击这里获取免费领取方式!
内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等
需要的小伙伴,可以一键三连,点击这里获取免费领取方式!