统一返回结果类
@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());
}
}