前后端分离项目的统一返回结果封装

本文展示了如何在Java Spring Boot应用中创建一个统一的响应类`R`,用于处理成功和失败的API响应。同时,定义了一个`ResultCodeEnum`枚举来定义错误码和消息。此外,还提供了全局异常处理类`GlobalExceptionHandler`,用于捕获并处理所有异常,返回自定义的错误信息。测试用例展示了如何在控制器中使用这些机制。
摘要由CSDN通过智能技术生成

统一返回结果类

@Data
public class R {

    private Boolean success;

    private Integer code;

    private String message;

    private Map<String, Object> data = new HashMap<String, Object>();

    // 把构造方法私有,不让外部new
    private R() {
    }

    // 成功静态方法
    public static R success() {
        R r = new R();
        r.setSuccess(true);
        r.setCode(ResultCodeEnum.SUCCESS.getCode());
        r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
        return r;
    }

    // 失败静态方法
    public static R error(Integer code, String message) {
        R r = new R();
        r.setSuccess(false);
        r.setCode(code);
        r.setMessage(message);
        return r;
    }

    // 设定自定义返回状态
    public static R error(ResultCodeEnum resultCodeEnum) {
        R r = new R();
        r.setSuccess(false);
        r.setCode(resultCodeEnum.getCode());
        r.setMessage(resultCodeEnum.getMessage());
        return r;
    }

    public R success(Boolean success) {
        this.setSuccess(success);
        return this;
    }

    public R message(String message) {
        this.setMessage(message);
        return this;
    }

    public R code(Integer code) {
        this.setCode(code);
        return this;
    }

    public R data(String key, Object value) {
        this.data.put(key, value);
        return this;
    }

    public R data(Map<String, Object> map) {
        this.setData(map);
        return this;
    }

}

错误码和错误信息定义

/***
 * 错误码和错误信息定义
 * 1. 错误码定义规则为5位数字
 * 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常
 * 错误码列表:
 *  10: 通用
 *      001:参数格式校验
 *  11: 用户
 *  12: 商品
 *  13: 订单
 *  ...
 */
@Getter
@ToString
public enum ResultCodeEnum {

    SUCCESS(true, 10000, "成功"), 
    UNKNOWN_REASON(false, 10001, "未知错误");

    private Boolean success;

    private Integer code;

    private String message;

    ResultCodeEnum(Boolean success, Integer code, String message) {
        this.success = success;
        this.code = code;
        this.message = message;
    }
}

测试

@RestController
public class Hello {

    @GetMapping("/hello")
    public R hello() {
        return R.success().data("data", "hello, hello");
    }
}

————————————————————————————————————
———————————————— 分割线 ————————————————
————————————————————————————————————

自定义异常类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CustomizeException extends RuntimeException {

	private Integer code;
	private String msg;

}
自定义异常处理类
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import com.june.commonutils.R;
import lombok.extern.slf4j.Slf4j;

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

	// 全局异常处理
	@ExceptionHandler(Exception.class)
	@ResponseBody
	public R error(Exception e) {
		log.error(e.getMessage(), e);
		return R.error().message("全局异常处理方法");
	}

	// 自定义异常处理
	@ExceptionHandler(CustomizeException.class)
	@ResponseBody
	public R error(CustomizeException e) {
		log.error(e.getMsg(), e);
		e.printStackTrace();
		return R.error().code(e.getCode()).message(e.getMsg());
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值