全局异常处理
在开发中总是会出现各种各样的异常,处理起来比较麻烦,为了解决这种问题,我们使用全局异常统一处理
返回结果类
public class Result implements Serializable {
/**
* 成功--不携带数据
*
* @return
*/
public static Result success() {
return new Result(ResponseStatusCode.SUCCESS_CODE.getCode(), ResponseStatusCode.SUCCESS_CODE.getMsg());
}
/**
* 成功--携带数据
*
* @param data
* @return
*/
public static Result success(Object data) {
return new Result(ResponseStatusCode.SUCCESS_CODE.getCode(), ResponseStatusCode.SUCCESS_CODE.getMsg(), data);
}
/**
* 失败
*
* @param msg
* @return
*/
public static Result fail(String msg) {
return new Result(ResponseStatusCode.FAIL_CODE.getCode(), msg);
}
/**
* 失败
*
* @param code
* @param msg
* @return
*/
public static Result fail(Integer code, String msg) {
return new Result(code, msg);
}
private Integer code; //状态码
private String msg; //消息
private Object data; //数据
public Result() {
}
public Result(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
自定义异常
public class CustomException extends RuntimeException {
private Integer code;
private String message;
public CustomException(Integer code, String message) {
super(message);
this.message = message;
this.code = code;
}
public CustomException( String message) {
super(message);
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
统一异常处理类
@ControllerAdvice //只要是添加了@Controller的类,产生的异常都会在这边处理
@ResponseBody
public class GlobalExceptionHandler {
/**
* 处理自定义异常
*
* @param c
* @return
*/
@ExceptionHandler(value = CustomException.class)
public Result customException(CustomException c) {
c.printStackTrace();
return Result.fail(c.getCode(), c.getMessage());
}
@ExceptionHandler(value = Exception.class)
public Result error(Exception e) {
e.printStackTrace();
return Result.fail(e.getMessage());
}
}
测试代码
@GetMapping("/test/{phone}")
public Result test(@PathVariable String phone) {
if (!"123456789".equals(phone)) {
throw new CustomException(ResponseStatusCode.PHONE_ERROR.getCode(), ResponseStatusCode.PHONE_ERROR.getMsg());
}
Map<String,String> map = new HashMap<>();
map.put("data","hahah");
return Result.success(map); //正常返回状态码200
}
Postman测试结果


本文档展示了如何在Java后端实现全局异常统一处理,包括创建返回结果类`Result`,自定义异常`CustomException`,以及使用`@ControllerAdvice`注解的`GlobalExceptionHandler`来捕获并处理异常。通过这种方式,可以方便地管理和返回一致的错误信息,提高代码的可维护性和用户体验。
834

被折叠的 条评论
为什么被折叠?



