简述Controller区别
ControllerAdvice:主要用于处理Controller层抛出的异常。这种方式适用于需要将异常信息渲染到页面上的情况。
RestControllerAdvice:专门用于处理Restful API抛出的异常。当Restful API抛出异常时,RestControllerAdvice会自动捕获并处理这些异常。这种方式适用于需要将异常信息以JSON格式返回给前端的情况。
操作如下:
新建ControllerGlobalExceptionHandler类
@RestControllerAdvice("com.saul.web.controller.system") //表明需要处理异常的范围
public class ControllerGlobalExceptionHandler {@Log(title = "调取接口字段异常", businessType = BusinessType.INSERT)@ExceptionHandler(value = MethodArgumentNotValidException.class) // 参数异常抛出的异常类型为MethodArgumentNotValidException,这里捕获这个异常public AjaxResult validExceptionHandler(MethodArgumentNotValidException e){System.out.println("数据异常处理");BindingResult bindingResult = e.getBindingResult();Map<String,String> map = new HashMap<>();StringBuilder mergerMessage = new StringBuilder("数据校验失败!");bindingResult.getFieldErrors().forEach((item)->{String message = item.getDefaultMessage();mergerMessage.append(message);mergerMessage.append(";");// 获取错误的属性字段名String field = item.getField();map.put(field,message);});return AjaxResult.error(HttpStatus.SAUL_ERROR, mergerMessage.toString(), new ArrayList<>());}
}
测试
发送一个包含无效数据的请求到MyController的submit方法,确保你的全局异常处理器能够捕获到MethodArgumentNotValidException异常,并将验证失败的字段信息记录到日志中。
public class MyController { @PostMapping("/submit") public AjaxResult submit(@RequestBody @Validated MyDto myDto) { // 处理请求... return AjaxResult.success(); }
}