Java自定义异常处理器
本文描述在项目中可自定义异常和自定义异常处理器并返回JSON数据
- 自定义异常
/**
* 自定义异常
*
*/
public class CustomException extends RuntimeException {
private static final long serialVersionUID = 1L;
private int code;
private String msg;
public CustomException(int code,String msg) {
this.code = code;
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
- 自定义异常处理器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* 异常处理器
*
*/
@RestControllerAdvice
public class CustomExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(CustomExceptionHandler.class);
/**
* 处理自定义异常
*/
@ExceptionHandler(CustomException.class)
public Result handleCustomException(CustomException ex){
Result result = new Result();
result.error(ex.getCode(), ex.getMsg());
return result;
}
/**
* 处理与数据库交互异常
*/
@ExceptionHandler(DuplicateKeyException.class)
public Result handleDuplicateKeyException(DuplicateKeyException ex){
Result result = new Result();
result.error(ErrorCode.DB_RECORD_EXISTS);
return result;
}
/**
* 处理全局异常
*/
@ExceptionHandler(Exception.class)
public Result handleException(Exception ex){
logger.error(ex.getMessage(), ex);
return new Result().error();
}
}
测试:
@GetMapping("test")
public Result test(){
int count = 1;
if(count > 0){
throw new CustomException(500,"自定义异常");
}
return new Result();
}
结果:
{
“code”: 500,
“msg”: “自定义异常”,
“data”: null
}