Java @未针对Jackson错误触发ControllerAdvice

Java @未针对Jackson错误触发ControllerAdvice,java,json,exception,jackson2,Java,Json,Exception,Jackson2,我有一个@RestController,它有一个POST方法,如果我在保存数据时出错,那么@ControllerAdvice就会触发;但是,如果我的错误是由@Valid注释触发的Jackson反序列化引起的,那么它永远不会到达@ControllerAdvice。处理@Valid异常的推荐方法是什么 控制器方法: @RequestMapping(method = RequestMethod.POST, value = "/principal/add") public PrincipalDto

我有一个@RestController,它有一个POST方法,如果我在保存数据时出错,那么@ControllerAdvice就会触发;但是,如果我的错误是由@Valid注释触发的Jackson反序列化引起的,那么它永远不会到达@ControllerAdvice。处理@Valid异常的推荐方法是什么

控制器方法:

@RequestMapping(method = RequestMethod.POST, value = "/principal/add")
  public PrincipalDto addPrincipal(@Valid @RequestBody PrincipalDto 
principal) {
    return principalService.addPrincipal(principal);
  }
异常控制器:

@ControllerAdvice(annotations = {RestController.class})
public class ExceptionController extends ResponseEntityExceptionHandler {
  @ExceptionHandler(value = Exception.class)
  protected ResponseEntity<Object> handleExceptions(Exception ex, WebRequest 
request) {
    ExceptionResponse exceptionResponse = new ExceptionResponse(ex);
    return handleExceptionInternal(
        ex, exceptionResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, 
request);
  }
}

我可以通过从handleExceptions方法中拉出HandleException内部来修复它:

@ControllerAdvice
public class ExceptionController extends ResponseEntityExceptionHandler {

  @ExceptionHandler(value = Exception.class)
  protected ResponseEntity<Object> handleExceptions(Exception ex, WebRequest 
request) {
    ExceptionResponse exceptionResponse = new ExceptionResponse(ex);
    return handleExceptionInternal(
            ex, exceptionResponse, new HttpHeaders(), 
HttpStatus.BAD_REQUEST, request);
  }

  @Override
  protected ResponseEntity<Object> handleExceptionInternal(
      Exception ex, Object body, HttpHeaders headers, HttpStatus status, 
WebRequest request) {
    return new ResponseEntity<>(new ExceptionResponse(ex), headers, status);
  }
}
@ControllerAdvice
公共类ExceptionController扩展ResponseEntityExceptionHandler{
@ExceptionHandler(值=Exception.class)
受保护的响应句柄异常(异常,例如WebRequest
请求){
ExceptionResponse ExceptionResponse=新的ExceptionResponse(ex);
返回手柄内部异常(
例如,exceptionResponse,新的HttpHeaders(),
HttpStatus.BAD_请求,请求);
}
@凌驾
受保护的响应安全句柄内部异常(
异常ex、对象体、HttpHeaders、HttpStatus状态、,
WebRequest(请求){
返回新的ResponseEntity(新的异常响应(ex)、标题、状态);
}
}
@ControllerAdvice
public class ExceptionController extends ResponseEntityExceptionHandler {

  @ExceptionHandler(value = Exception.class)
  protected ResponseEntity<Object> handleExceptions(Exception ex, WebRequest 
request) {
    ExceptionResponse exceptionResponse = new ExceptionResponse(ex);
    return handleExceptionInternal(
            ex, exceptionResponse, new HttpHeaders(), 
HttpStatus.BAD_REQUEST, request);
  }

  @Override
  protected ResponseEntity<Object> handleExceptionInternal(
      Exception ex, Object body, HttpHeaders headers, HttpStatus status, 
WebRequest request) {
    return new ResponseEntity<>(new ExceptionResponse(ex), headers, status);
  }
}