SpringBoot实现RESTful服务接口

在实际使用SpringBoot开发项目的过程中,后端服务经常会遇到跨模块访问的需求,这就需要我们的服务接口有同一的开发规范,这样在跨模块调用时才能更方便、高效。而Spring Boot也为我们创建Web服务提供了非常强大的组件化支持,简单而方便,我们一起来看一下。

RESTful服务

在当下的分布式系统及微服务架构中,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可以指定接口的具体路径,可以指定路径信息、请求方式、和内容类型等

  1. @RequestMapping注解在服务层级(控制器类)时定义了服务的根路径,一般使用复数形式“/accounts”
  2. @GetMapping注解则在操作级别定义了HTTP请求方法的具体路径及参数信息
  3. 在进行HTTP协议请求时,可以使用content-type属性用来指定所传输的内容类型,在接口服务中我们可以通过 @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-typeapplication/json类型时的编码内容,通过@RequestBody注解可以将请求体中的JSON字符串绑定到相应的JavaBean 上。

@PostMapping(value = "/")
public void updateAccount(@RequestBody Account account) {
    ...
}

输出注解

@RestController:该注解相当于是Spring MVC中@Controller@ResponseBody这两个注解的组合,它们会自动返回JSON格式的数据。在使用时,我们只需要返回一个普通的业务对象即可,因为@RestController注解已经屏蔽了底层实现的复杂性。

使用RestTemplate访问HTTP端点的RESTful接口

服务创建完成后,我们就要对服务进行消费,RestTemplate就是SpringBoot提供的用于访问RESTful服务的客户端模板工具类,位于org.springframework.web.client包中。

创建RestTemplate对象

创建一个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);
}

使用RestTemplate访问 Web 服务

  • GET方式:包括getForObject和getForEntity两组方法
  • POST方式:除postForObject和postForEntity方法组之外,还额外提供了一组postForLocation方法
  • PUT方式:put方法
  • DALETE方式:delete方法
  • Header方式:headForHeaders方法
  • 方式不限:包括exchange和execute方法,exchange是一个通用且统一的方法,它既能发送 GET 和 POST 请求,也能用于发送其他各种类型的请求。

小结

SpringBoot中使用RESTful接口来统一接口规范,让我们的开发更规范化,并使用RestTemplate消费接口。

RestTemplate模板类来完成对远程 HTTP 端点的访问,其为开发人员提供了一大批有用的工具方法来实现 HTTP 请求的发送以及响应的获取。同时,该模板类还开发了一些定制化的入口供开发人员嵌入,用来实现对 HTTP 请求过程进行精细化管理的处理逻辑,RestTemplate 在设计和实现上毫无疑问是一款非常有效的工具类。

 最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。

对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一些学习资料

需要的小伙伴,可以一键三连,点击这里获取免费领取方式!

《Java核心知识点合集(283页)》

内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等 在这里插入图片描述

《Java中高级核心知识点合集(524页)》

在这里插入图片描述

《Java高级架构知识点整理》

在这里插入图片描述

《Docker从入门到实践》

在这里插入图片描述

《spring could 学习笔记》

在这里插入图片描述

《JVM与性能调优知识点整理》

在这里插入图片描述

《MySQL性能调优与架构设计解析文档》305页

在这里插入图片描述

《Nginx入门到实战》319页

在这里插入图片描述

《Java并发编程》385页

在这里插入图片描述

《1000道 互联网Java工程师面试题 (485页)》

在这里插入图片描述

需要的小伙伴,可以一键三连,点击这里获取免费领取方式! 

你可能感兴趣的:(java,spring,boot,spring)