SpringMVC proporciona @ControllerAdvice
funciones
- Extraiga una clase de manejo de excepciones, agregue
@ControllerAdvice
anotaciones a la clase ybasePackages
especifique mediante atributos que debe manejar las excepciones lanzadas por esas clases;
@ControllerAdvice(basePackages = "com.atguigu.gulimall.product.controller")
public class GulimallExceptionControllerAdvice {
}
- Escriba un método para manejar excepciones y agregue
@ExceptionHandler
anotaciones al método para decirle a Springmvc qué excepciones puede manejar este método;
pase el tipo de excepción de respuesta en los parámetros del método
@Slf4j
@ControllerAdvice(basePackages = "com.atguigu.gulimall.product.controller")
public class GulimallExceptionControllerAdvice {
@ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R handleValidException(MethodArgumentNotValidException e){
log.info("数据校验出现问题:{},异常类型:{}",e.getMessage(),e.getClass());
BindingResult bindingResult = e.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
Map<String,String> map = new HashMap<>();
fieldErrors.forEach((fieldError)->{
map.put(fieldError.getField(),fieldError.getDefaultMessage());
});
return R.error(400,"数据校验错误").put("data",map);
}
@ResponseBody
@ExceptionHandler(value = Throwable.class)
public R handleException(Throwable throwable){
return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(),BizCodeEnume.UNKNOW_EXCEPTION.getMsg());
}
}