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


    一、枚举概述

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

    二、枚举的使用

    1、定义枚举

    代码示例

    1. package cn.com.example17;
    2. /**
    3.  * 创建枚举类
    4.  */
    5. public enum  EnumClass {
    6. }

    2、定义枚举项

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

    代码示例

    1. package cn.com.example17;
    2. /**
    3.  * 创建枚举类
    4.  */
    5. public enum  EnumClass {
    6.     // 定义枚举项
    7.     A(),
    8.     B("admin"),
    9.     C; // 如果根据无参构造器定义枚举项,那么小括号可以省略
    10.     // 属性
    11.     public String name;
    12.     // 构造器
    13.     // 构造器不允许是公共的,默认是私有
    14.     EnumClass(){}
    15.     EnumClass(String name){
    16.         this.name = name;
    17.     }
    18.     
    19.     // 定义方法
    20.     public void handler(){
    21.         System.out.println("这是一个方法");
    22.     }
    23. }

    反编译

    1. Compiled from "EnumClass.java"
    2. public final class cn.com.example17.EnumClass extends java.lang.Enum<cn.com.example17.EnumClass> {
    3.   public static final cn.com.example17.EnumClass A;
    4.   public static final cn.com.example17.EnumClass B;
    5.   public static final cn.com.example17.EnumClass C;
    6.   public java.lang.String name;
    7.   public static cn.com.example17.EnumClass[] values();
    8.   public static cn.com.example17.EnumClass valueOf(java.lang.String);
    9.   public void handler();
    10.   static {};
    11. }

    3、调用枚举项

    1. package cn.com.example17;
    2. public class EnumClassTest {
    3.     public static void main(String[] args) {
    4.         // 因为枚举类中的枚举项都是一个静态常量的实例,因此我们可以通过类名直接调用
    5.         EnumClass b = EnumClass.B;
    6.         System.out.println(b.name);
    7.     }
    8. }

    4、方法的重写

    代码示例

    1. package cn.com.example17;
    2. /**
    3.  * 创建枚举类
    4.  */
    5. public enum  EnumClass {
    6.     A(),
    7.     B("admin"),
    8.     C{
    9.         @Override
    10.         public void handler() {
    11.             System.out.println("重写后的方法");
    12.         }
    13.     };
    14.     // 属性
    15.     public String name;
    16.     // 构造器
    17.     // 构造器不允许是公共的,默认是私有
    18.     EnumClass(){}
    19.     EnumClass(String name){
    20.         this.name = name;
    21.     }
    22.     // 定义方法
    23.     public void handler(){
    24.         System.out.println("这是一个方法");
    25.     }
    26. }

    三、API接口统一返回结构

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

    1、创建ResponseStatus类

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

    代码示例

    1. package cn.com.example17;
    2. public enum ResponseStatus {
    3.     SUCCESS(2001,"接口调用成功"),
    4.     VALIDATE_FAILED(2002,"参数校验失败"),
    5.     FORBIDDEN(2003,"无权限访问"),
    6.     FAILED(2004,"接口调用失败");
    7.     private int code;
    8.     private String message;
    9.     ResponseStatus() {
    10.     }
    11.     ResponseStatus(int code, String message) {
    12.         this.code = code;
    13.         this.message = message;
    14.     }
    15.     public int getCode() {
    16.         return code;
    17.     }
    18.     public void setCode(int code) {
    19.         this.code = code;
    20.     }
    21.     public String getMessage() {
    22.         return message;
    23.     }
    24.     public void setMessage(String message) {
    25.         this.message = message;
    26.     }
    27. }

    2、创建Result类

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

    代码示例

    1. package cn.com.example17;
    2. import java.io.Serializable;
    3. public class Result implements Serializable{
    4.     private static final long serialVersionUID = -1131858345563802214L;
    5.     
    6.     private Integer code;
    7.     private String message;
    8.     private T data;
    9.     public Result() {
    10.     }
    11.     public Result(Integer code, String message, T data) {
    12.         this.code = code;
    13.         this.message = message;
    14.         this.data = data;
    15.     }
    16.     public Integer getCode() {
    17.         return code;
    18.     }
    19.     public void setCode(Integer code) {
    20.         this.code = code;
    21.     }
    22.     public String getMessage() {
    23.         return message;
    24.     }
    25.     public void setMessage(String message) {
    26.         this.message = message;
    27.     }
    28.     public T getData() {
    29.         return data;
    30.     }
    31.     public void setData(T data) {
    32.         this.data = data;
    33.     }
    34.     @Override
    35.     public String toString() {
    36.         return "Result{" +
    37.                 "code=" + code +
    38.                 ", message='" + message + '\'' +
    39.                 ", data=" + data +
    40.                 '}';
    41.     }
    42. }

    3、创建ResponseResult类

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

    代码示例

    1. package cn.com.example17;
    2. public class ResponseResult{
    3.     public static <T> Result<T> success(T data){
    4.         return new Result<>(ResponseStatus.SUCCESS.getCode(),ResponseStatus.SUCCESS.getMessage(),data);
    5.     }
    6.     public static <T> Result<T> success(String message,T data){
    7.         return new Result<>(ResponseStatus.SUCCESS.getCode(),message,data);
    8.     }
    9.     public static Result<?> failed(){
    10.         return new Result<>(ResponseStatus.FAILED.getCode(),ResponseStatus.FAILED.getMessage(),null);
    11.     }
    12.     public static Result<?> failed(String message){
    13.         return new Result<>(ResponseStatus.FAILED.getCode(),message,null);
    14.     }
    15.     public static <T> Result<T> instance(int code,String message,T data){
    16.         return new Result<>(code,message,data);
    17.     }
    18. }
  • 相关阅读:
    蚁群算法(ant system,AS)
    【定语从句练习题】 which 修饰句子
    2、shell文本处理工具
    iclr 2023 投稿指南
    两化融合的基本知识
    服务器搭建(TCP套接字)-epoll版(服务端)
    封装hfex-icon的plugin
    PPPoE lcp和ncp协商
    Vue3基础知识-1
    Visual Studio C++ 的 头文件和源文件
  • 原文地址:https://blog.csdn.net/2301_78671173/article/details/132717447