spring boot开发接口api

​ 在上一次教了大家怎么去搭建一个自己的后端模板之后,现在和大家分享讨论一下如何开发RestfulApi接口。
首先开发api之前要考虑到后端是需要写api文档的,这里可以提两个比较好的在线自动生成api文档的工具:swagger和showdoc。当然还有其他好的工具,大家可以去自己探索,但是希望在开发接口之前就确定好使用哪一种工具,使用之后就不要再去考虑其他的工具了,不然会耽误开发。在这里我个人比较喜欢showdoc生成的文档格式,清晰明了,但是用它生成的文档代码量比较大,swagger相对来说代码量比showdoc少一点,但是生成的文档没有showdoc那么好看。showdoc基本上不需要什么配置,swagger需要的配置比较麻烦。萝卜青菜各有所爱,看自己喜欢哪一个吧。

在这里我只讲开发接口api而已.

定义一个统一的响应模板

​ 开发出来的接口返回的响应结果应该尽可能的规范统一,可以去看restful规范来开发自己的接口。一个比较好的响应规范应该要有状态码(code)、信息描述(msg)、数据(data)。

下面我展示一下自己的开发模板:

package org.csu.backdemo.utils;import lombok.Data;import java.io.Serializable;//统一响应数据格式
@Data
public class Result implements Serializable {private int code;//200表示正常,非200表示异常private String msg;//结果返回的信息private Object data;//结果返回的数据//请求成功的响应public static Result success(Object data){return success(200,"请求成功",data);}//自定义成功相应的信息内容public static Result success(int code,String msg,Object data){Result result=new Result();result.setCode(code);result.setMsg(msg);result.setData(data);return result;}//请求失败public static Result fail(int code,String msg){return fail(code,msg,null);}//自定义失败相应的信息内容public static Result fail(int code,String msg,Object data){Result result=new Result();result.setCode(code);result.setMsg(msg);result.setData(data);return result;}

这里提醒一下,使用@Data注解需要使用到Lombok,大家可以自行去了解。

开发接口controller

1.接口类的编写

​ 要知道写一个controller的一个方法(带有@***Mapping)就是一个api接口,可以自己去创建一个controller类,对应的某个模块的接口。

注意编写这个controller这个类,需要在类的前面加上注解@RestController,或者在每个方法前面加上@ResponseBody。我建议使用@RestController。

2.请求方式

请求方式的注解有:

@RequestMapping //一般用于全局设置,对应一个模块/** rest请求方式主要有以下几种:* get:主要用来获取资源,对应的注解:@GetMapping* post:用来建立新的资源,对应的注解:@PostMapping* put:用来更新资源,对应的注解:@PutMapping* delete:用来删除资源,对应的注解:@DeleteMapping* */

3.参数的传递

第一类:请求路径参数
1、@PathVariable
获取路径参数。即url/{id}这种形式。

2、@RequestParam
获取查询参数。即url?name=这种形式

注意:@GetMapping是没有请求体的,也就是说它大部分都是采用上面的两种方式

@GetMapping("/demo/{id}")
public void demo(@PathVariable(name = "id") String id, @RequestParam(name = "name") String name) {System.out.println("id="+id);
System.out.println("name="+name);
}

那么当get方法的参数过于复杂的时候怎么处理?

public List<String> getName(@RequestParam String queryDtoStr) {QueryDto queryDto = new Gson().fromJson(queryDtoStr, QueryDto .class);// ....return new ArrayList<>();
}

前端的请求就变成了:

http://localhost:8080/app/names?queryDtoStr={"query1":12,"query2":2,"query3":2}

第二类:Body参数

@RequestBody

这个就是请求体参数,前端一般是用json串来传递给后端的。后端可以采用一个实体bean来接受参数。

public void doInsert(@RequestBody ApiUser apiUser) {AfaUser user = BeanUtils.copyBean(apiUser, AfaUser.class);userService.addAfaUser(user);}

也可以是这样的

@PostMapping(path = "/demo1")
public void demo1(@RequestBody Map<String, String> person) {System.out.println(person.get("name"));
}

这些就是基本上传递参数的用法了。可能还会有@RequestHead这些注解等等,有些是比较少用的,我就不说了。

状态码

状态码必须精确

客户端的每一次请求,服务器都必须给出回应。回应包括 HTTP 状态码和数据两部分。

HTTP 状态码就是一个三位数,分成五个类别。

# 1xx:相关信息
# 2xx:操作成功
# 3xx:重定向
# 4xx:客户端错误
# 5xx:服务器错误

这五大类总共包含100多种状态码,覆盖了绝大部分可能遇到的情况。每一种状态码都有标准的(或者约定的)解释,客户端只需查看状态码,就可以判断出发生了什么情况,所以服务器应该返回尽可能精确的状态码。

API 不需要1xx状态码,下面介绍其他四类状态码的精确含义。

2XX状态码

200状态码表示操作成功,但是不同的方法可以返回更精确的状态码。

# GET: 200 OK
# POST: 201 Created
# PUT: 200 OK
# PATCH: 200 OK
# DELETE: 204 No Content

上面代码中,POST返回201状态码,表示生成了新的资源;DELETE返回204状态码,表示资源已经不存在。

此外,202 Accepted状态码表示服务器已经收到请求,但还未进行处理,会在未来再处理,通常用于异步操作。下面是一个例子。

HTTP/1.1 202 Accepted
{  "task": {    "href": "/api/company/job-management/jobs/2130040",    "id": "2130040"  }}

3xx 状态码

API 用不到301状态码(永久重定向)和302状态码(暂时重定向,307也是这个含义),因为它们可以由应用级别返回,浏览器会直接跳转,API 级别可以不考虑这两种情况。

API 用到的3xx状态码,主要是303 See Other,表示参考另一个 URL。它与302307的含义一样,也是"暂时重定向",区别在于302307用于GET请求,而303用于POSTPUTDELETE请求。收到303以后,浏览器不会自动跳转,而会让用户自己决定下一步怎么办。下面是一个例子。

HTTP/1.1 303 See OtherLocation: /api/orders/12345

4xx 状态码

4xx状态码表示客户端错误,主要有下面几种。

400 Bad Request:服务器不理解客户端的请求,未做任何处理。

401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。

403 Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限。

404 Not Found:所请求的资源不存在,或不可用。

405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。

410 Gone:所请求的资源已从这个地址转移,不再可用。

415 Unsupported Media Type:客户端要求的返回格式不支持。比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。

422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。

429 Too Many Requests:客户端的请求次数超过限额。

5xx 状态码

5xx状态码表示服务端错误。一般来说,API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。

500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。

503 Service Unavailable:服务器无法处理请求,一般用于网站维护状态。

spring boot开发接口api相关推荐

  1. 学习笔记-Spring Boot 开发 RESTful Web API(一)

    题记: 本篇是Spring Boot 开发学习系列中基础知识学习的一部分,为 RESTful Web API 相关基础知识,为实践操作奠定理论基础. REST不是一个标准,而是一种软件应用架构风格.基 ...

  2. Spring Boot与RESTful API

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇Spring Boot开发WEB页面文章中,我们介绍了如何搭建一个有页面的web项目,这一篇我们则着重讲一下Sprin ...

  3. 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...

  4. Spring Boot开发介绍

    Spring Boot开发介绍 Spring Boot介绍 安装Spring Boot插件 创建Spring Boot项目 Idea 创建Spring Boot项目失败 解决方法1-更换为aliyun ...

  5. 视频教程-Vue、Spring Boot开发小而完整的Web前后端分离项目实战-Java

    Vue.Spring Boot开发小而完整的Web前后端分离项目实战 3年多.net开发经验:5年的java后端开发经验,熟悉行.net,java流行技术,拥有多个.net,java web企业级应; ...

  6. 真的简单,单手用Spring Boot 开发一个微信小程序

    前言   嗨,大家好,现在微信使用的用户很多,作为开发人员也可以建立一个自己的微信小程序,本期与大家分享一下作者建立微信小程序的开发流程. 申请   百度搜索微信公众号平台,然后扫码登录注册一个微信公 ...

  7. 保姆级的一个基于spring boot开发的前后端分离商城教程

    前言 推荐一个基于spring boot开发前后端分离商城,有完整的代码笔记和视频教程,希望对正在找项目练手的同学有所帮助 本文资料文档领取(在文末) 一.项目背景 5中常见的电商模式 B2B .B2 ...

  8. 如何使用 Spring Boot 开发邮件系统?

    本文来自作者在 GitChat 上的精彩分享<使用 Spring Boot 开发邮件系统> 1. 前言 互联网发展到现在,邮件服务已经成为互联网企业中必备功能之一,应用场景非常广泛,比较常 ...

  9. spring boot 开发soap webservice

    介绍 spring boot web模块提供了RestController实现restful,第一次看到这个名字的时候以为还有SoapController,很可惜没有,对于soap webservic ...

最新文章

  1. php适配器模式应用,什么是适配器模式,它有哪些应用场景
  2. mysql group by日期_深入研究mysql中group by与order by取分类最新时间内容
  3. Java 网络编程1
  4. I love max and multiply HDU - 6971(详细解答)
  5. 在线教育如何应对流量洪峰?阿里云专家:上云+云数据库是最佳路径
  6. install python-tk_No module named _tkinter, please install the python-tk package 解决方法总结
  7. 正反斜杠的区别_电脑中的正斜杠(/)与反斜杠(\)的区别
  8. 好用的Java开发IDEA插件汇总推荐
  9. Pentest Wiki Part6 权限维持
  10. 快应用采坑(3)-使用差别
  11. web 安全-电脑端口(全部)
  12. win7常见问题汇总
  13. 微信/支付宝扫码支付流程
  14. 视频基本原理 -视频接口之 - MIPI接口(五)
  15. Learn Git Branching 答案汇总
  16. Valine-实现QQ邮箱识别生成头像地址(完美解决头像问题)
  17. Git问题Everything up-to-date正确解决方法
  18. 程序猿和hr面试时的巅峰对决
  19. python找零_【python算法书】硬币找零问题?
  20. 国家信息分类和编码标准

热门文章

  1. mtk android关掉锁屏,MTK 锁屏配置
  2. spring boot 实现fisco bcos最基础案例
  3. 公众号+视频号+个人号的闭环运营将非常重要
  4. 高分子结晶的新进展、新模型
  5. Android多媒体实现拍照,调用相册,音频等功能
  6. 变量液压马达比例控制器
  7. 什么是socket?socket详解
  8. cas多系统集成统一认证
  9. 【云云怪】黑白/彩色字符画/字符视频,代码搜集
  10. 加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)