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

小白的springboot之路(十一)、构建后台RESTfull API的更多相关文章

  1. 小白的springboot之路(一)、环境搭建、第一个实例

    小白的springboot之路(一).环境搭建.第一个实例 0- 前言 Spring boot + spring cloud + vue 的微服务架构技术栈,那简直是爽得不要不要的,怎么爽法,自行度娘 ...

  2. 小白的springboot之路(二)、集成swagger

    0-前言 现在的项目开发,基本都是前后端分离,后端专注于API接口开发,都需要编写和维护API接口文档.如果你还在用Word来编写接口文档,那你就out了,这个时候,当当当当~神兵利器swagger隆 ...

  3. 小白的springboot之路(七)、事务支持

    0-前言 事务管理对于企业级应用来说必不可少,用来确保数据的完整性和一致性: 1-开启事务 spring boot支持编程式事务和声明式事务,用声明式事务即可: spring boot开启事务非常简单 ...

  4. 小白的springboot之路(六)、跨域解决方案CORS

    0-前言 前后端分离.分布式集群,经常都会涉及到跨域访问,而浏览器基于同源策略,正常情况下是不能跨域的,这就需要我们解决跨域访问问题:spring boot解决跨域也比较简单: 1-CORS跨域解决方 ...

  5. 小白的springboot之路(五)、集成druid

    0-前言 Druid阿里巴巴开源的一个java数据库连接池,是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能:集成它能够方便我们对数据库连接进行监控和分析,下面我们来集成它: ...

  6. 小白的springboot之路(三)、集成mybatis与MySQL

    0.前言 mybatis属于半自动的ORM,相比hibernate这种全自动的ORM,兼顾了性能与易用:目前企业项目中,基本都是mybatis的天下:今天就来整合mybatis与MySQL: 1.整合 ...

  7. 小白的springboot之路(四)、mybatis-generator自动生成mapper和model、dao

    0-.前言 在用mybatis开发项目中,数据库动辄上百张数据表,如果你一个一个去手动编写,比较耗费时间:还好,我们有mybatis-generator插件,只需简单几步就能自动生成mybatis的m ...

  8. 小白的springboot之路(八)、继承Redis以及@Cacheable注解实现Redis缓存

    0.前言 在项目中,缓存作为一种高效的提升性能的手段,几乎必不可少,Redis作为其中的佼佼者被广泛应用: 一.spring boot集成Redis 1.添加依赖 <dependency> ...

  9. 小白的springboot之路(十)、全局异常处理

    0.前言 任何系统,我们不会傻傻的在每一个地方进行异常捕获和处理,整个系统一般我们会在一个的地方统一进行异常处理,spring boot全局异常处理很简单: 介绍前先说点题外话,我们现在开发系统,都是 ...

随机推荐

  1. 一文带你深入了解 redis 复制技术及主从架构

    主从架构可以说是互联网必备的架构了,第一是为了保证服务的高可用,第二是为了实现读写分离,你可能熟悉我们常用的 MySQL 数据库的主从架构,对于我们 redis 来说也不意外,redis 数据库也有各 ...

  2. OutOfMemoryError本地线程不足问题分析

    java.lang.OutOfMemoryError本地线程不足问题 11月份中旬客户方的一个系统突然报内存异常,当时是早上上班的时候碰到该项目的项目经理,还跟该项目的项目经理开玩笑说你们系统上线将近 ...

  3. EntityFramework Core 3.0查询

    前言 随着.NET Core 3.0的发布,EF Core 3.0也随之正式发布,关于这一块最近一段时间也没太多去关注,陆续会去对比之前版本有什么变化没有,本节我们来看下两个查询. 分组 我们知道在E ...

  4. 基于 HTML5 + WebGL 的地铁 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  5. Mac卸载mysql并安装mysql升级到8.0.13版本

    引言 今天mysql升级到8.0.13版本,遇到了很多问题,在此进行总结方便以后查看. 卸载mysql brew uninstall mysql sudo rm /usr/local/mysql su ...

  6. xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    6月25日任务 15.4 xshell使用xftp传输文件15.5 使用pure-ftpd搭建ftp服务扩展vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.co ...

  7. 在docker中加入加速器的方法

    前提条件:在一台Linux中安装好了docker 目的:在docker中加如这入个加速器的目的,是让docker pull 时能速度快一点,但是好像docker push速度并没有加快. 换句话说,就 ...

  8. Cypher基本指令学习1

    1.查询节点 查询所有节点match (n) return n 查询带有标签的节点 match(movie:Flyer) return movie.name 查询关联节点(查询A导演的所有电影) ma ...

  9. linux下docker安装部署项目(全)

    一 .系统安装 基于CentOS-7-x86_64-Minimal-1708.iso安装系统 1.2.  配置系统 1.2.1  在线更新内核版本(建议更新,旧版内核会有docker BUG) 1.2 ...

  10. 【权限管理系统】Spring security(三)---认证过程(原理解析,demo)

      在前面两节Spring security (一)架构框架-Component.Service.Filter分析和Spring Security(二)--WebSecurityConfigurer配 ...