千家信息网

SpringBoot 中怎么支持Restful

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,SpringBoot 中怎么支持Restful,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、RESTful风格API的好处RESTf
千家信息网最后更新 2026年11月03日SpringBoot 中怎么支持Restful

SpringBoot 中怎么支持Restful,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、RESTful风格API的好处

  • RESTful是基于http方法的API设计风格,而不是一种新的技术. url和http的method和statuscode都是很有历史的技术。

  • 看Url就知道要什么资源

  • 看http method就知道针对资源干什么

  • 看http status code就知道结果如何

规范了程序员的代码开发,为前端后端交互减少了接口交流的口舌成本,是"约定大于配置"的体现。通过下面的设计,大家来理解一下这三句话。

二、RESTful风格API的设计风格

  1. REST 是面向资源的(名词)

REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。比如:

不符合REST的接口URI符合REST接口URI功能
GET /api/getDogsGET /api/dogs/{id}获取一个小狗狗
GET /api/getDogsGET /api/dogs获取所有小狗狗
GET /api/addDogsPOST /api/dogs添加一个小狗狗
GET /api/editDogs/{id}PUT /api/dogs/{id}修改一个小狗狗
GET /api/deleteDogs/{id}DELETE /api/dogs/{id}删除一个小狗狗
  1. 用HTTP方法体现对资源的操作(动词)

  • GET : 获取资源

  • POST : 添加资源

  • PUT : 修改资源

  • DELETE : 删除资源

实际上,这四个动词实际上就对应着增删改查四个操作,这就利用了HTTP动词来表示对资源的操作

  1. HTTP状态码

通过HTTP状态码体现动作的结果,不要自定义

200 OK 400 Bad Request 500 Internal Server Error

在 APP 与 API 的交互当中,其结果逃不出这三种状态:

  • 所有事情都按预期正确执行完毕 - 成功

  • APP 发生了一些错误 - 客户端错误(如:校验用户输入身份证,结果输入的是军官证,就是客户端错误)

  • API 发生了一些错误 - 服务器端错误(各种编码bug或服务内部自己导致的异常)

这三种状态与上面的状态码是一一对应的。如果你觉得这三种状态,分类处理结果太宽泛,http-statuscode还有很多。建议还是要遵循KISS(Keep It Stupid and Simple)原则,上面的三种状态码完全可以覆盖99%以上的场景。三个状态码大家都记得住,多了就不一定了。

  1. Get方法和查询参数不应该改变数据

改变数据的事交给POST、PUT、DELETE

  1. 使用复数名词

/dogs 而不是 /dog

  1. 复杂资源关系的表达

GET /cars/711/drivers/ 返回 使用car 711的所有司机

GET /cars/711/drivers/4 返回 使用car 711的4号司机

  1. 高级用法:HATEOAS

Hypermedia as the Engine of Application State 超媒体作为应用状态的引擎 RESTful API最好做到Hypermedia,或HATEOAS,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。比如,当用户向api.example.com的根目录发出请求,会得到这样一个文档。

{"link": {  "rel":   "collection https://www.example.com/zoos",  "href":  "https://api.example.com/zoos",  "title": "List of zoos",  "type":  "application/vnd.yourformat+json"}}

上面代码表示,文档中有一个link属性,用户读取这个属性就知道下一步该调用什么API了。

  1. 为集合提供过滤 排序 选择和分页等功能

  • Filtering过滤:

使用唯一的查询参数进行过滤:GET /cars?color=red 返回红色的carsGET /cars?seats<=2 返回小于两座位的cars集合
  • Sorting排序:

允许针对多个字段排序GET /cars?sort=-manufactorer,+model这是返回根据生产者降序和模型升序排列的car集合
  • Field selection

移动端能够显示其中一些字段,它们其实不需要一个资源的所有字段,给API消费者一个选择字段的能力,这会降低网络流量,提高API可用性。GET /cars?fields=manufacturer,model,id,color
  • Paging分页

使用 limit 和offset.实现分页,缺省limit=20 和offset=0;GET /cars?offset=10&limit=5
  1. 版本化你的API

使得API版本变得强制性,不要发布无版本的API。/api/v1/blog面向扩展开放,面向修改关闭。

三、开发REST接口

  1. 第一步:定义资源(对象)

@Data@Builderpublic class Article {    private Long  id;    private String author;    private String title;    private String content;    private Date createTime;}
  • @Data注解帮我们定义了一系列常用方法,如:getters、setters、hashcode、equals等

  1. 第二步:HTTP方法与Controller(动作)

@Slf4j@RestController@RequestMapping("/rest")public class ArticleRestController {     @RequestMapping(value = "/article", method = POST, produces = "application/json")    public AjaxResponse saveArticle(@RequestBody Article article) {        log.info("saveArticle:{}",article);        return  AjaxResponse.success(article);    }     @RequestMapping(value = "/article/{id}", method = DELETE, produces = "application/json")    public AjaxResponse deleteArticle(@PathVariable Long id) {        log.info("deleteArticle:{}",id);        return AjaxResponse.success(id);    }     @RequestMapping(value = "/article/{id}", method = PUT, produces = "application/json")    public AjaxResponse updateArticle(@PathVariable Long id, @RequestBody Article article) {        article.setId(id);        log.info("updateArticle:{}",article);        return AjaxResponse.success(article);    }     @RequestMapping(value = "/article/{id}", method = GET, produces = "application/json")    public AjaxResponse getArticle(@PathVariable Long id) {        Article article1 = Article.builder().id(1L).author("zimug").content("spring boot 2.深入浅出").createTime(new Date()).title("t1").build();        return AjaxResponse.success(article1);    }}
  • 加上@Slf4j注解,就可以直接使用log变量打印日志

下面这个类是用于统一数据响应接口标准的。它的作用是:统一所有开发人员响应前端请求的返回结果格式,减少前后端开发人员沟通成本,是开发约定的落地。在异常处理的章节会做更加详细的说明。

public class AjaxResponse {    private boolean isok;   //请求是否处理成功    private int code;          //请求响应状态码(200、400、500)    private String message;  //请求结果描述信息    private Object data;  //请求结果数据    private AjaxResponse() {    }    public static AjaxResponse success() {        AjaxResponse resultBean = new AjaxResponse();        resultBean.setIsok(true);        resultBean.setCode(200);        resultBean.setMessage("success");        return resultBean;    }    public static AjaxResponse success(Object data) {        AjaxResponse resultBean = new AjaxResponse();        resultBean.setIsok(true);        resultBean.setCode(200);        resultBean.setMessage("success");        resultBean.setData(data);        return resultBean;    }    // getter / setter 略}

四、REST接口开发常用的注解

  1. @RestController与@Controller

@RestController相当于 @Controller和@ResponseBody结合。它有两层含义:一是作为控制器注入到Spring上下文环境,二是请求响应为数据序列化(默认序列化方式是JSON),而不是跳转到html或模板页面。

  1. @RequestMapping 与@GetMapping、@PutMapping、@PostMapping、@DeleteMapping

@RequestMapping(value = "/article", method = RequestMethod.GET) 新方法可以简写为: @GetMapping("/article"),其他同理。

  1. @RequestBody与@ResponseBody

用于接收和响应序列化数据(JSON),可以支持嵌套JSON数据结构。

  1. @PathVariable 与@RequestParam

PathVariable用于URI上的{参数}
RequestParam用于接收普通方式提交的参数

看完上述内容,你们掌握SpringBoot 中怎么支持Restful的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

资源 状态 方法 结果 数据 接口 开发 小狗 错误 动词 参数 字段 用户 风格 支持 序列 文档 注解 版本 面的 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技保险 互联网核心科技是什么 科技类互联网 九亚互联网科技 火传媒上海互联网科技 深圳卡尔迅互联网科技有限公司怎么样 滨湖区互联网智能科技产品供应 海南购全球互联网科技 阿里互联网科技公司 受益于互联网科技的高速发展 移动互联网年度科技创新 电子科技大学互联网创业大赛 上海钢联属于互联网科技股吗 中国互联网有什么科技 广州梦谷互联网科技有限公司领导 北京天晋互联网科技有限公司 互联网科技大佬云集 华人运通互联网科技公司 黑龙江互联网科技公司 重庆科技产业互联网有哪些 苏州找大状互联网科技有限公司 云信互联网科技有限公司 远信互联网科技 撒么互联网科技公司 剑昆互联网络科技有限公司临桂 欧洲十大科技互联网公司 996高科技互联网公司 佛山市拉法互联网科技有限公司 黑科技 体验场景 互联网大会 吉林省码上互联网科技电话
0