前后端分离通用返回json

通用的返回类

package com.aaa.cache.common.lang.util;

import com.aaa.cache.common.lang.enums.ResultCode;
import lombok.Data;

import java.io.Serializable;

/**
 * 通用的  返回数据
 */
@Data
public class R<T> implements Serializable {

    private Integer code;
    private String message;
    private T data;

    private R() {
    }

    public R(ResultCode resultCode) {
        this.code = resultCode.getCode();
        this.message = resultCode.getMessage();
    }

    // 后端使用 通用正确
    public static <T> R<T> ok() {
        return new R<>(ResultCode.OK);
    }

    // 后端使用通用错误
    public static <T> R<T> fail() {
        return new R<>(ResultCode.INTERNAL_SERVER_ERROR);
    }

    public static <T> R<T> fail(Integer code, String message) {
        R<T> r = new R<>();
        r.code=code;
        r.message=message;
        return r;
    }

    public static <T> R<T> fail(ResultCode resultCode) {
        return new R<>(resultCode);
    }

    // 前后端时使用 成功
    public static <T> R<T> clientOk() {
        return new R<>(ResultCode.CLIENT_SUCCESS);
    }

    // 前后端分离的错误
    public static <T> R<T> clientFail() {
        return new R<>(ResultCode.CLIENT_FAIL);
    }

    public static <T> R<T> clientFail(ResultCode resultCode) {
        return new R<>(resultCode);
    }

    public R<T> data(T data) {
        this.data = data;
        return this;
    }

}

通用的返回状态

package com.aaa.cache.common.lang.enums;

import lombok.Getter;


@Getter
public enum  ResultCode {
    /**
     *  响应状态码
    * */
    OK(200,"OK"),
    CREATED(201,"新资源被创建"),
    ACCEPTED(202,"已接受处理请求但尚未完成"),
    NOT_AUTHORITATIVE(203,"没有授权"),
    NO_CONTENT(204,"无内容"),
    RESET_CONTENT(205,"内容重置"),
    PARTIAL_CONTENT(206,"部分内容"),
    MULTIPLE_CHOICES(300,"选择多项"),
    MOVED_PERMANENTLY(301,"永久移动"),
    MOVED_TEMP(302,"临时重定向"),
    SEE_OTHER(303,"查看其他"),
    BAD_REQUEST(400,"错误的请求"),
    UNAUTHORIZED(401,"未经授权"),
    NOT_FOUND(404,"找不到"),
    METHOD_NOT_ALLOWED(405, "不允许的方法"),
    NOT_ACCEPTABLE(406,"不能接受"),
    REQUEST_TIMEOUT(408,"请求超时"),
    CONFLICT(409, "发生冲突"),
    PRECONDITION_FAILED(412, "前提条件失败(条件更新时的冲突)"),
    UNSUPPORTED_MEDIA_TYPE(415, "不支持的媒体类型"),
    INTERNAL_SERVER_ERROR(500, "内部服务器错误"),
    SERVICE_UNAVAILABLE(503, "暂停服务"),
    /**
    *  前后端分离时的状态码以及信息
    * */
    CLIENT_SUCCESS(20000,"成功"),
    CLIENT_FAIL(20001,"失败"),
    CLIENT_USERNAME_PASSWORD(20002,"用户名或密码错误"),
    CLIENT_NULL_AUTHORIZED(20003,"权限不足"),
    CLIENT_FAR_FAIL(20004,"远程调用失败"),
    CLIENT_REPEAT(20005,"重复操作");
    private  Integer code;
    private  String message;
    private ResultCode(){}
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }


}


通用的全局异常

package com.aaa.cache.common.lang.exception;

import com.aaa.cache.common.lang.util.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice(basePackages = "com.aaa.controller")
@Slf4j
public class GlobalException {

    /**
     * 自定义异常捕获
     * @param e  异常
     * @return 返回异常信息
     */
    @ExceptionHandler(MyException.class)
    public R myException(MyException e) {
        e.printStackTrace();
        return R.fail(e.getCode(), e.getMessage());
    }

    /**
     *  所有的异常捕获
     * @param e 异常
     * @return 返回异常信息
     */
    @ExceptionHandler(Exception.class)
    public R exception(Exception e) {
        e.printStackTrace();
        return R.fail();
    }

}


自定义异常

package com.aaa.cache.common.lang.exception;

import com.aaa.cache.common.lang.enums.ResultCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 自定义异常
 *
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyException  extends  RuntimeException{
    private Integer code;
    private  String msg;

    public MyException (ResultCode resultCode){
        this.code=resultCode.getCode();
        this.msg=resultCode.getMessage();
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值