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": "获取所有用户信息成功"
}

GIT源码地址:https://github.com/anson-yang/cloverDemo.git

最新文章

  1. 如何用ZBrush快速绘制身体
  2. 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
  3. wait方法和sleep方法的区别
  4. ListView 搭配SimpleAdapter
  5. 在Chrome Console中加载jQuery
  6. Case Studies: Retail and Investment Banks Use of Social Media
  7. 话说 MAX_FILE_SIZE
  8. OC-方法
  9. C#获取上个月的第一天零点和最后一天23点59分59秒
  10. 简单实现计算机上多个jdk环境切换
  11. Innodb 状态的部分解释
  12. Notes中几个处理多值域的通用函数
  13. BZOJ4268 : 小强的书架
  14. IAP远程在线升级
  15. 6.capacity scheduler
  16. cpython解释器内存机制
  17. [TCO2013]TrickyInequality
  18. 转 IntelliJ IDEA 快捷键
  19. POJ 2528 Mayor&amp;#39;s posters 离散化+线段树
  20. NEKOGAMES

热门文章

  1. linux ftp配置及实操
  2. OSI案例详解+ARP+DNS
  3. Bean中要使用配置文件中的值,使用set方法注入
  4. 进程_Linux内核设计与实现笔记
  5. 动态规划--最长上升子序列(LIS)的长度
  6. 为什么现在使用多周期CPU,而单周期CPU被弃用?
  7. Java 从入门到进阶之路(十一)
  8. MySQL数据库开发的36条原则
  9. 【华为云网络技术分享】HTTP重定向HTTPS配置指南
  10. CSS3(1)---圆角边框、边框阴影