spring boot开发接口api
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。它与302
和307
的含义一样,也是"暂时重定向",区别在于302
和307
用于GET
请求,而303
用于POST
、PUT
和DELETE
请求。收到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相关推荐
- 学习笔记-Spring Boot 开发 RESTful Web API(一)
题记: 本篇是Spring Boot 开发学习系列中基础知识学习的一部分,为 RESTful Web API 相关基础知识,为实践操作奠定理论基础. REST不是一个标准,而是一种软件应用架构风格.基 ...
- Spring Boot与RESTful API
2019独角兽企业重金招聘Python工程师标准>>> 在上一篇Spring Boot开发WEB页面文章中,我们介绍了如何搭建一个有页面的web项目,这一篇我们则着重讲一下Sprin ...
- 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建
从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...
- Spring Boot开发介绍
Spring Boot开发介绍 Spring Boot介绍 安装Spring Boot插件 创建Spring Boot项目 Idea 创建Spring Boot项目失败 解决方法1-更换为aliyun ...
- 视频教程-Vue、Spring Boot开发小而完整的Web前后端分离项目实战-Java
Vue.Spring Boot开发小而完整的Web前后端分离项目实战 3年多.net开发经验:5年的java后端开发经验,熟悉行.net,java流行技术,拥有多个.net,java web企业级应; ...
- 真的简单,单手用Spring Boot 开发一个微信小程序
前言 嗨,大家好,现在微信使用的用户很多,作为开发人员也可以建立一个自己的微信小程序,本期与大家分享一下作者建立微信小程序的开发流程. 申请 百度搜索微信公众号平台,然后扫码登录注册一个微信公 ...
- 保姆级的一个基于spring boot开发的前后端分离商城教程
前言 推荐一个基于spring boot开发前后端分离商城,有完整的代码笔记和视频教程,希望对正在找项目练手的同学有所帮助 本文资料文档领取(在文末) 一.项目背景 5中常见的电商模式 B2B .B2 ...
- 如何使用 Spring Boot 开发邮件系统?
本文来自作者在 GitChat 上的精彩分享<使用 Spring Boot 开发邮件系统> 1. 前言 互联网发展到现在,邮件服务已经成为互联网企业中必备功能之一,应用场景非常广泛,比较常 ...
- spring boot 开发soap webservice
介绍 spring boot web模块提供了RestController实现restful,第一次看到这个名字的时候以为还有SoapController,很可惜没有,对于soap webservic ...
最新文章
- php适配器模式应用,什么是适配器模式,它有哪些应用场景
- mysql group by日期_深入研究mysql中group by与order by取分类最新时间内容
- Java 网络编程1
- I love max and multiply HDU - 6971(详细解答)
- 在线教育如何应对流量洪峰?阿里云专家:上云+云数据库是最佳路径
- install python-tk_No module named _tkinter, please install the python-tk package 解决方法总结
- 正反斜杠的区别_电脑中的正斜杠(/)与反斜杠(\)的区别
- 好用的Java开发IDEA插件汇总推荐
- Pentest Wiki Part6 权限维持
- 快应用采坑(3)-使用差别
- web 安全-电脑端口(全部)
- win7常见问题汇总
- 微信/支付宝扫码支付流程
- 视频基本原理 -视频接口之 - MIPI接口(五)
- Learn Git Branching 答案汇总
- Valine-实现QQ邮箱识别生成头像地址(完美解决头像问题)
- Git问题Everything up-to-date正确解决方法
- 程序猿和hr面试时的巅峰对决
- python找零_【python算法书】硬币找零问题?
- 国家信息分类和编码标准