这里收集一些自己需要使用到的公共(common)类或工具(util)类。

前后端分离后,Springboot专注于后端,用户发出请求,Springboot返回JSON格式的数据给前端。

JSON格式的数据应该包括返回码,提示信息,还有数据。
基本上每个web项目都需要,所以,实现返回的JSON格式数据的作为公共类。
主要包括二个类和一个接口

  • IErrorCode接口
  • ResultCode类
  • CommonResult类

IErrorCode接口

封装API的错误码
代码:

public interface IErrorCode {
    long getCode();

    String getMessage();
}

ResultCode类

枚举了一些常用API操作码

public enum ResultCode implements IErrorCode {
    SUCCESS(200, "操作成功"),
    FAILED(500, "操作失败"),
    VALIDATE_FAILED(404, "参数检验失败"),
    UNAUTHORIZED(401, "暂未登录或token已经过期"),
    FORBIDDEN(403, "没有相关权限");
    private long code;
    private String message;

    private ResultCode(long code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public long getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}

CommonResult类

做为控制层的通用返回对象

public class CommonResult<T> {
    private long code;
    private String message;
    private T data;   //范型

    protected CommonResult() {
    }

    protected CommonResult(long code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     */
    public static <T> CommonResult<T> success(T data) {
        return new CommonResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     * @param  message 提示信息
     */
    public static <T> CommonResult<T> success(T data, String message) {
        return new CommonResult<T>(ResultCode.SUCCESS.getCode(), message, data);
    }

    /**
     * 失败返回结果
     * @param errorCode 错误码
     */
    public static <T> CommonResult<T> failed(IErrorCode errorCode) {
        return new CommonResult<T>(errorCode.getCode(), errorCode.getMessage(), null);
    }

    /**
     * 失败返回结果
     * @param message 提示信息
     */
    public static <T> CommonResult<T> failed(String message) {
        return new CommonResult<T>(ResultCode.FAILED.getCode(), message, null);
    }

    /**
     * 失败返回结果
     */
    public static <T> CommonResult<T> failed() {
        return failed(ResultCode.FAILED); //ResultCode 枚举操作码
    }

    /**
     * 参数验证失败返回结果
     */
    public static <T> CommonResult<T> validateFailed() {
        return failed(ResultCode.VALIDATE_FAILED);
    }

    /**
     * 参数验证失败返回结果
     * @param message 提示信息
     */
    public static <T> CommonResult<T> validateFailed(String message) {
        return new CommonResult<T>(ResultCode.VALIDATE_FAILED.getCode(), message, null);
    }

    /**
     * 未登录返回结果
     */
    public static <T> CommonResult<T> unauthorized(T data) {
        return new CommonResult<T>(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getMessage(), data);
    }

    /**
     * 未授权返回结果
     */
    public static <T> CommonResult<T> forbidden(T data) {
        return new CommonResult<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;
    }
}

使用方法

在控制层要返回JSON对象时,可以直接返回CommonResult<T>类型。在控制器处理方法中可以直接使用CommonResult类的若干静态方法来得到包装了data后的CommonResult对象。如下例,我是要返回一个School对象。

@RestController
public class SchoolController {
    @Resource
    private SchoolService schoolService;
    @RequestMapping("/school/{id}")
    public CommonResult<School> getSchoolById(@PathVariable long id){
        return CommonResult.success(schoolService.getSchoolById(id));
    }
}

在这里插入图片描述

返回的数据为

code: 200
data: {
	gmtCreate: "2021-11-05T15:52:40.000+00:00"
	gmtModified: "2021-11-05T15:52:40.000+00:00"
	id: 2
	isDelete: 0
	name: "湖南大学"
}
message: "操作成功"
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐