代码
需要配置统一返回对象使用
import com.fan.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.Map;
import java.util.Objects;
/**
* 全局异常拦截
*/
@Slf4j
@RestControllerAdvice(basePackages = "com.fan.controller")
public class ExceptionForGlobal {
/**
* JSR303校验异常拦截
*/
@ExceptionHandler(value = {MethodArgumentNotValidException.class, BindException.class})
public Result<Map<String, String>> handleValidationException(Exception e) {
BindingResult bindingResult = null;
if (e instanceof MethodArgumentNotValidException) {
bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
} else if (e instanceof BindException) {
bindingResult = ((BindException) e).getBindingResult();
}
// 获取第一个错误参数
String msg = "请求参数错误";
if (Objects.nonNull(bindingResult)) {
for (FieldError fieldError : bindingResult.getFieldErrors()) {
msg = fieldError.getDefaultMessage();
break;
}
}
return Result.failMsg(msg);
}
/**
* 断言异常信息拦截
*/
@ExceptionHandler(value = {IllegalArgumentException.class})
public Result<Map<String, String>> dealIllegalArgumentException(Exception e) {
return Result.failMsg(e.getMessage());
}
/**
* 异常拦截
*/
@ExceptionHandler(value = {Exception.class})
public Result<Map<String, String>> dealException(Exception e) {
e.printStackTrace();
return Result.error("服务异常");
}
}
常见异常处理
import com.fan.model.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.Map;
import java.util.Objects;
/**
* 全局异常拦截
*/
@Slf4j
@RestControllerAdvice(basePackages = "com.fan.controller")
public class ExceptionForGlobal {
/**
* JSR303校验异常拦截
*/
@ExceptionHandler(value = {MethodArgumentNotValidException.class, BindException.class})
public Result<Map<String, String>> handleValidationException(Exception e) {
BindingResult bindingResult = null;
if (e instanceof MethodArgumentNotValidException) {
bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
} else if (e instanceof BindException) {
bindingResult = ((BindException) e).getBindingResult();
}
// 获取第一个错误参数
String msg = "请求参数错误";
if (Objects.nonNull(bindingResult)) {
for (FieldError fieldError : bindingResult.getFieldErrors()) {
msg = fieldError.getDefaultMessage();
break;
}
}
return Result.failMsg(msg);
}
/**
* 断言异常信息拦截
*/
@ExceptionHandler(value = {IllegalArgumentException.class})
public Result<Map<String, String>> dealIllegalArgumentException(Exception e) {
return Result.failMsg(e.getMessage());
}
/**
* 参数不合法异常
*/
@ExceptionHandler(value = {HttpMessageNotReadableException.class})
public Result<Map<String, String>> dealHttpMessageNotReadableException(Exception e) {
return Result.failMsg("参数不合法");
}
/**
* 异常拦截
*/
@ExceptionHandler(value = {Exception.class})
public Result<Map<String, String>> dealException(Exception e) {
e.printStackTrace();
return Result.error("服务异常");
}
}