前后端分离开发,API接口这样写才简洁

一、枚举概述

枚举,用来管理常量,在日常生活中很常见,比如一个人的姓名只能是男或女,一周的星期只能是7天中的一个等等,类似这种当一个变量有多种固定可能的取值时,就可以将它定义为枚举类型。在JDK1.5之前没有枚举类型,那时候一般用接口常量来替代,而使用Java枚举类型,可以更贴切的表示这种常量

二、枚举的使用

1、定义枚举

代码示例

复制代码
package cn.com.example17;

/**
 * 创建枚举类
 */
public enum  EnumClass {


}

2、定义枚举项

枚举类中可以有多个(属性)枚举项,每一个枚举项都是枚举类的实例

代码示例

复制代码
package cn.com.example17;

/**
 * 创建枚举类
 */
public enum  EnumClass {
    // 定义枚举项
    A(),
    B("admin"),
    C; // 如果根据无参构造器定义枚举项,那么小括号可以省略

    // 属性
    public String name;

    // 构造器
    // 构造器不允许是公共的,默认是私有
    EnumClass(){}

    EnumClass(String name){
        this.name = name;
    }
    
    // 定义方法
    public void handler(){
        System.out.println("这是一个方法");
    }

}

反编译

复制代码
Compiled from "EnumClass.java"
public final class cn.com.example17.EnumClass extends java.lang.Enum<cn.com.example17.EnumClass> {
  public static final cn.com.example17.EnumClass A;
  public static final cn.com.example17.EnumClass B;
  public static final cn.com.example17.EnumClass C;
  public java.lang.String name;
  public static cn.com.example17.EnumClass[] values();
  public static cn.com.example17.EnumClass valueOf(java.lang.String);
  public void handler();
  static {};
}

3、调用枚举项

复制代码
package cn.com.example17;

public class EnumClassTest {

    public static void main(String[] args) {

        // 因为枚举类中的枚举项都是一个静态常量的实例,因此我们可以通过类名直接调用
        EnumClass b = EnumClass.B;
        System.out.println(b.name);

    }

}

4、方法的重写

代码示例

复制代码
package cn.com.example17;

/**
 * 创建枚举类
 */
public enum  EnumClass {

    A(),
    B("admin"),
    C{
        @Override
        public void handler() {
            System.out.println("重写后的方法");
        }
    };

    // 属性
    public String name;

    // 构造器
    // 构造器不允许是公共的,默认是私有
    EnumClass(){}

    EnumClass(String name){
        this.name = name;
    }

    // 定义方法
    public void handler(){
        System.out.println("这是一个方法");
    }

}

三、API接口统一返回结构

关于接口返回信息结构的统一封装,由于现在大多数项目都是采用的前后端分离进行开发,那么统一返回,方便了前端进行开发和封装,以及给出响应的状态码和描述信息。前端在axios的拦截器中可以对状态码进行判断 前端调用API接口,通过描述信息进行排查

1、创建ResponseStatus类

创建枚举类,并实例化出常用的状态码及描述信息

代码示例

复制代码
package cn.com.example17;

public enum ResponseStatus {

    SUCCESS(2001,"接口调用成功"),
    VALIDATE_FAILED(2002,"参数校验失败"),
    FORBIDDEN(2003,"无权限访问"),
    FAILED(2004,"接口调用失败");


    private int code;

    private String message;

    ResponseStatus() {
    }

    ResponseStatus(int code, String message) {
        this.code = code;
        this.message = message;
    }


    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

2、创建Result类

创建Result类,用于返回统一的数据结构

代码示例

复制代码
package cn.com.example17;

import java.io.Serializable;

public class Result<T> implements Serializable{

    private static final long serialVersionUID = -1131858345563802214L;
    
    private Integer code;
    private String message;
    private T data;

    public Result() {
    }

    public Result(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer 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;
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }
}

3、创建ResponseResult类

创建ResponseResult类,封装success、failed及instance方法

代码示例

复制代码
package cn.com.example17;

public class ResponseResult{

    public static <T> Result<T> success(T data){
        return new Result<>(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMessage(),data);
    }

    public static <T> Result<T> success(String message,T data){
        return new Result<>(ResponseStatus.SUCCESS.getCode(),message,data);
    }

    public static Result<?> failed(){
        return new Result<>(ResponseStatus.FAILED.getCode(),ResponseStatus.FAILED.getMessage(),null);
    }

    public static Result<?> failed(String message){
        return new Result<>(ResponseStatus.FAILED.getCode(),message,null);
    }

    public static <T> Result<T> instance(int code,String message,T data){
        return new Result<>(code,message,data);
    }

}
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json