小白的springboot之路(十一)、构建后台RESTfull API
0、前言
开发系统中,前后端分离,后端一般返回RESTfull API,前端调用API构建UI,彼此分离、互相完全独立;
后台API中,我们一般返回结果码、提示信息、数据三部分内容,如图:
我们今天就来构建一个完整的前后端分离后端的API
一、RESTfull API构建
1、增加结果码接口 IErrorCode
package com.anson.common.result; /** * @Author anson * @Description 1、结果码接口 * @Date 2019/12/10 10:50 */ public interface IErrorCode { long getCode(); String getMessage(); }
2、添加结果消息枚举 ResultCode
package com.anson.common.result; /** * @Author anson * @Description 结果消息枚举 * @Date 2019/12/10 22:05 */ public enum ResultCode implements IErrorCode { // 数据操作消息定义 SUCCESS(200, "成功!"), BODY_NOT_MATCH(400,"请求的数据格式不符!"), UNAUTHORIZED(401,"暂未登录或token已经过期!"), FORBIDDEN(403, "没有相关权限"), NOT_FOUND(404, "未找到该资源!"), FAILED(500, "服务器内部错误!"), SERVER_BUSY(503,"服务器正忙,请稍后再试!"); private long code; private String message; private ResultCode(long code, String message) { this.code = code; this.message = message; } public long getCode() { return code; } public String getMessage() { return message; } }
3、添加返回结果实体 ResultBody
package com.anson.common.result; /** * @description: API返回结果实体 * @author: anson * @Date: 2019/12/10 10:54 */ public class ResultBody<T> { private long code; private String message; private T data; protected ResultBody() { } protected ResultBody(long code, String message, T data) { this.code = code; this.message = message; this.data = data; } /** * 成功返回结果 * * @param data 获取的数据 */ public static <T> ResultBody<T> success(T data) { return new ResultBody<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data); } /** * 成功返回结果 * * @param data 获取的数据 * @param message 提示信息 */ public static <T> ResultBody<T> success(T data, String message) { return new ResultBody<T>(ResultCode.SUCCESS.getCode(), message, data); } /** * 失败返回结果 * * @param errorCode 错误码 */ public static <T> ResultBody<T> failed(IErrorCode errorCode) { return new ResultBody<T>(errorCode.getCode(), errorCode.getMessage(), null); } /** * 失败返回结果 * * @param message 提示信息 */ public static <T> ResultBody<T> failed(String message) { return new ResultBody<T>(ResultCode.FAILED.getCode(), message, null); } /** * 失败返回结果 */ public static <T> ResultBody<T> failed() { return failed(ResultCode.FAILED); } /** * 参数验证失败返回结果 */ public static <T> ResultBody<T> validateFailed() { return failed(ResultCode.NOT_FOUND); } /** * 参数验证失败返回结果 * * @param message 提示信息 */ public static <T> ResultBody<T> validateFailed(String message) { return new ResultBody<T>(ResultCode.NOT_FOUND.getCode(), message, null); } /** * 未登录返回结果 */ public static <T> ResultBody<T> unauthorized(T data) { return new ResultBody<T>(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getMessage(), data); } /** * 未授权返回结果 */ public static <T> ResultBody<T> forbidden(T data) { return new ResultBody<T>(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getMessage(), data); } public long getCode() { return code; } public void setCode(long code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
4、添加实体类、dao、service
略,具体看代码,跟前几节的一致
5、编写controller
//--------------------------------API test------------------- //1、根据ID获取单个用户 @ApiOperation(value = "获取用户", notes = "根据id查询用户信息") @ApiImplicitParam(name = "id", value = "用户id", required=true, dataType="int") //API参数 @RequestMapping(value="/user/{id}",method= RequestMethod.GET) public ResultBody getUserById(int id) { User user = userservice.selectByPrimaryKey(id); return ResultBody.success(user,"获取单个信息成功"); } //2、获取所有用户 @ApiOperation(value = "获取所有用户", notes = "获取所有用户") @RequestMapping(value="/userall",method= RequestMethod.GET) public ResultBody getUserAll() { List<User> users = userservice.getAll(); return ResultBody.success(users,"获取所有用户信息成功"); }
好,完毕
二、运行测试,在swagger中执行测试,结果如下
{ "code": 200, "data": [ { "id": 1, "password": "123", "realname": "张三", "username": "anson" }, { "id": 2, "password": "123", "realname": "李四", "username": "Alex" }, { "id": 3, "password": "123", "realname": "王五", "username": "kks" }, { "id": 4, "password": "000", "realname": "赵柳", "username": "eee" } ], "message": "获取所有用户信息成功" }