前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Spring Boot设计和实现REST API

使用Spring Boot设计和实现REST API

作者头像
lyb-geek
发布于 2019-05-16 06:19:49
发布于 2019-05-16 06:19:49
2K00
代码可运行
举报
文章被收录于专栏:Linyb极客之路Linyb极客之路
运行总次数:0
代码可运行

REST端点用于集成应用程序或服务器端向客户端提供服务。在本文中,将介绍基于CRUD的SpringBoot来设计和实现REST端点。

假设有一个客户数据,我将创建一个相应的Spring REST Controller来访问客户数据。为了简单起见,我将只关注控制器类而不是整个spring应用程序。

这是一个CRUD应用程序,因此控制器将有四种基本方法来支持获取,保存,更新和删除操作。所有这些操作都将适用于客户数据。下面是控制器类的框架。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
@RequestMapping("/customers")
public class CustomerController {
    @Autowired
    private CustomerRepository customerRepository;


    //get, save, update and delete 方法
}

客户资源的所有端点都以/ customers开头。

设计和实施端点

端点应简短易用。例如,为了通过Id获取客户,我们可以使用/ customers / {id}这样的端点。

但是像/ customers / getCustomerById,其URL中含有操作动词是错误的,因为通过Id获取客户是一个操作,我们可以使用HTTP方法实现此操作,因此放在URL中是多余的,它使URL复杂化。

HTTP提供了各种可用于简化端点的方法。HTTP提供了一些标准方法,如GET,PUT,POST或OPTIONS等。所有这些方法都有助于设计简单的REST端点,因为这是标准的,所以每个人都可以理解它们。

GET

GET方法用于访问资源。要根据ID获取客户记录,我们可以使用/ customers / {id}等端点。以下是此终点的实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = {"/{id}"})ResponseEntity byId(@PathVariable String id){    if(!customerRepository.existsById(id))        return new ResponseEntity<>(HttpStatus.NOT_FOUND); // HTTP 404
    return new ResponseEntity<>(customerRepository.findById(id).get(), HttpStatus.OK); // HTTP 200}

客户资源的所有端点都以/ customers开头。

当客户端请求无效或不存在的“id”时,我们可以使用标准HTTP响应代码,而不是使用自定义正文或错误消息进行响应。HTTP响应代码是REST中用于通知处理状态的标准方式。有许多类别的代码可用,这里是关于这些代码的一些信息的链接。

  • 404 - 未找到:如果数据存储中没有“id”,则使用此HTTP代码是合适的。请注意,此HTTP代码是一个标准代码,表示没有找到任何数据,因此客户端可以理解这一点,而不会在响应正文中提供任何额外信息。
  • 200 - 确定:已成功处理请求。

POST

此方法用于创建新数据记录。此请求的端是/ customers。数据作为正文的一部分发送,因此不需要请求参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = {""}, method = RequestMethod.POST)ResponseEntity<?> save(@RequestBody Customer customer){    if(customer == null)        return new ResponseEntity(HttpStatus.BAD_REQUEST); // HTTP 400    if(customerRepository.existsById(customer.getId()))        return new ResponseEntity(HttpStatus.CONFLICT); // HTTP 409
    Customer cust = customerRepository.save(customer);    return new ResponseEntity<>(cust, HttpStatus.CREATED); // HTTP 201}
  • 400 - BAD REQUEST:如果请求为null,则通知客户端请求不正确。
  • 409 - 冲突:如果新客户的ID已经存在于数据存储中,那么它就是冲突请求。
  • 201 - 创建:所有验证都成功,数据将插入到存储中。

PUT

此方法允许用户更新现有数据记录。此请求的端点是/ customers,数据作为正文的一部分发送,因此不再需要请求参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = {""}, method = RequestMethod.PUT)ResponseEntity<?> update(@RequestBody Customer customer){    if(customer == null)        return new ResponseEntity(HttpStatus.BAD_REQUEST); // HTTP 400    if(!customerRepository.existsById(customer.getId()))        return new ResponseEntity(HttpStatus.BAD_REQUEST); // HTTP 400
    return new ResponseEntity<>(customerRepository.save(customer), HttpStatus.CREATED); // HTTP 201}
  • 400 - BAD REQUEST:如果正文是空的,或者客户在数据存储中不可用。
  • 201 - 创建:没有用于更新的标准HTTP代码,因此我们可以使用201进行更新。

DELETE

此方法应用于删除请求。此请求的端点是/ customers / {id}。请求中的指定ID将从存储中删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)ResponseEntity<Object> delete(@PathVariable String id){    if(!customerRepository.existsById(id))        return new ResponseEntity<>(HttpStatus.BAD_REQUEST); // HTTP 400
    customerRepository.deleteById(id);    return new ResponseEntity<>(HttpStatus.NO_CONTENT); // HTTP 204}
  • 400 - BAD REQUEST:如果数据存储中不存在id,那么这是一个错误的请求。
  • 204 - NO CONTENT:删除后数据将不可用,因此在这种情况下204是合适的。我们也可以考虑使用200。

demo链接

https://github.com/kpradeep12/mycustomers

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Spring Boot 2.X构建RESTful服务
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等。它大大减少了基于Spring开发的生产级应用程序的工作量。因此,开发人员能够真正专注于以业务为中心的功能。
java干货
2021/02/19
1.5K0
使用Spring Boot 2.X构建RESTful服务
ResponseEntity使用
ResponseEntity继承了HttpEntity类,HttpEntity代表一个http请求或者响应实体,其内部有两个成员变量:header及body,代表http请求或响应的header及body,其中的body是泛化的。
用户4396583
2024/07/20
1660
在Spring/Springboot中异步处理异常
目前,每当出现特殊情况时,客户休息应用程序都会返回一个 ResponseEntity(一个由状态、标头和正文组成的 Http 响应包装器)。例如,在请求详细信息时找不到客户。
用户4235284
2023/10/14
4730
在Spring/Springboot中异步处理异常
最新 Restful API 风格 ResponseEntity 用法大全
我们在使用ResponseEntity时,更多的是为了设置不同的HttpResponse Code,如果你的系统偏好是通过Response Body中的Code来判断API状态即几乎所有API的HttpResponse Code=200,那么完全可以不使用ResponseEntity作为返回数据类型,只需要去返回Response Body,通过Body中开发者自定义的Code给API设置状态
猫头虎
2024/04/07
6010
基于 MVC的 RESTful风格的实现
可以看到通过这个 RESTAPI都是通过对同一个资源==的操作,所不同的就是通过不同的HTTP方法来实现对资源不同的处理。
石的三次方
2021/01/05
7940
Spring Boot构建RESTful Web服务
Spring Boot为为企业应用程序构建RESTful Web服务提供了非常好的支持。本章将详细介绍如何使用Spring Boot构建RESTful Web服务。
黑洞代码
2021/08/05
8920
如何使用Spring和Java配置构建一个REST API
本文展示了如何在Spring中配置REST——控制器和HTTP状态响应码、有效负载编排和内容协商的配置。
烟雨平生
2023/03/07
2.3K0
如何使用Spring和Java配置构建一个REST API
Spring Boot REST API错误处理指南
本来是5号来的文章,无奈最近准备换工作,一直拖着没写,今天搜索偶然看见有人已经翻译完了,由于时间原因这次就直接转载下吧,现附上英文原文及相关信息,最后再附上译文原文:
WindCoder
2018/09/19
3.5K0
Spring Boot REST API错误处理指南
RESTful源码学习笔记之RPC和Restful深入理解
RPC 即远程过程调用(Remote Procedure Call Protocol,简称RPC),像调用本地服务(方法)一样调用服务器的服务(方法)。通常的实现有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是传输数据的格式.
Jetpropelledsnake21
2018/08/23
7340
restful
什么是restful rest是一种设计风格 它是一种思想 REST接口定义 直接上例子。。 GET http://127.0.0.1/user/{id} 获取用户数据 POST http://127.0.0.1/user form表单数据 新增用户数据 PUT http://127.0.0.1/user 更新用户数据 DELETE http://127.0.0.1/user 删除用户数据 user表示接收的参数是实体类 springMvc 实现restful @Autowi
周杰伦本人
2022/10/25
3800
restful
SpringBoot中REST API的错误异常处理设计
RESTful API中的异常Exception处理有两个基本要求,需要明确业务意义的错误消息以及hhtp状态码。良好的错误消息能够让API客户端纠正问题。在本文中,我们将讨论并实现Spring的REST API异常处理。 Restful API错误/异常设计 在RESTful API中设计异常处理时,最好在响应中设置HTTP状态代码,这样可以表示客户端的请求为什么会失败的原因。当然也可以发送更多信息包括HTTP状态码,这些将帮助客户端迅速定位错误。 比如下面是Springboot表示/api/pro
lyb-geek
2018/08/16
7.4K0
ResponseEntity
ResponseEntity继承了HttpEntity类,HttpEntity代表一个http请求或者响应实体,其内部有两个成员变量:header及body,代表http请求或响应的header及body,其中的body是泛化的。
用户4396583
2024/07/16
1400
5. spring-boot REST 全局异常处理
单页应用越来越多以及移动化之后,服务化已经是老生常谈了,在前文代码的基础上做些简单的通用模块的处理,后端返回结果的不一致性真的会给前端带来很大的麻烦,故此为止:
MasterVin
2018/08/30
1.2K0
5. spring-boot REST 全局异常处理
使用 Java @Annotations 构建完整的 Spring Boot REST API
本文旨在演示用于构建功能性 Spring Boot REST API 的重要 Java @annotations。Java 注解的使用使开发人员能够通过简单的注解来减少代码冗长。
终码一生
2022/04/15
3.8K0
使用 Java @Annotations 构建完整的 Spring Boot REST API
如何使用 Spring Boot 创建 REST API ?
Spring Boot 是一个功能强大的框架,可以轻松创建 RESTful API。在本文中,我们将逐步指导如何使用 MySQL 和 JPA 在 Spring Boot 中创建 RESTful API。我们将首先创建一个新的 Spring Boot 项目并根据我们的需求对其进行配置。
用户1418987
2023/10/26
1.2K0
如何使用 Spring Boot 创建 REST API ?
Spring boot with PostgreSQL
本文节选自《Netkiller Java 手札》 作者 netkiller 他的网站 http://www.netkiller.cn 5.15. Spring boot with PostgreSQL 5.15.1. pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <de
netkiller old
2018/03/05
1.6K0
深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用
🎉深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用
IT_陈寒
2023/12/14
1.3K0
深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用
Spring MVC开发REST接口
在现代的Web开发中,REST(Representational State Transfer)已经成为一种流行的架构风格,用于构建可伸缩、轻量级的分布式系统。Spring MVC是Spring Framework的一部分,它提供了强大的支持来开发RESTful风格的接口。本文将介绍如何使用Spring MVC来开发REST接口,并演示一些常用的技巧和实践。
王也518
2023/12/21
3450
Spring Boot 开发离不开这些注解,快来学习啦!
Spring Boot 是一款非常流行的 Java 框架,其注解用法复杂而丰富。 在介绍 Spring Boot 的注解之前,我们需要先了解 Spring 框架中的 AOP(面向切面编程)概念。 Spring 的 AOP 可以帮助开发者实现一些非业务功能的代码,如日志记录、性能监控等。这些功能可以通过定义一个 Aspect(切面) 类来实现。
每周聚焦
2023/06/06
4040
Spring | 如何在项目中优雅的处理异常 - 全局异常处理以及自定义异常处理
在快速迭代和持续交付的今天,软件的健壮性、可靠性和用户体验已经成为区别成功与否的关键因素。特别是在Spring框架中,由于其广泛的应用和丰富的功能,如何优雅地处理异常就显得尤为重要。本文旨在探讨在Spring中如何更加高效、准确和优雅地处理异常,帮助开发者更好地构建和维护Spring应用。
kfaino
2023/09/26
4.1K0
Spring | 如何在项目中优雅的处理异常 - 全局异常处理以及自定义异常处理
相关推荐
使用Spring Boot 2.X构建RESTful服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验