Как перехватить исключение для этого исключения ConstraintViolationException:
{
"timestamp": "2019-05-31T07:23:03.419+0000",
"status": 500,
"error": "Internal Server Error",
"message": "could not execute statement; SQL [n/a]; constraint [fkitcllv8yn2id9lj3rmw3wskhd]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
"path": "/pelajar"
}
Это исключение происходит, когда я пытаюсь удалить запись. Но эта запись все еще используется в качестве ссылки другой записью в другой таблице.
У меня есть 2 CustomExceptionHandle:
1-й для общего исключения улова и
2-й для исключения ConstraintViolation улова.
Но в моей программе при каждом запуске ConstraintViolation будут выполняться handleAllExceptions.
Я ожидаю, что функция handleConstraint должна быть выполнена.
@ControllerAdvice
@RestController
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@Order(Ordered.HIGHEST_PRECEDENCE)
@ExceptionHandler(value = {ConstraintViolationException.class})
public ResponseEntity<Object> handleConstraint(ConstraintViolationException ex,
WebRequest request ) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), "Record still have reference from other table",
request.getDescription(false));
return new ResponseEntity(exceptionResponse, HttpStatus.BAD_REQUEST);
}
@Order(Ordered.LOWEST_PRECEDENCE)
@ExceptionHandler(value = {Exception.class})
public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
ExceptionResponse exceptionResponse = new ExceptionResponse(new Date(), ex.getMessage()+" Custom Error",
request.getDescription(false));
return new ResponseEntity(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Но, если я удалю handleAllException, ConstraintViolationException будет перехвачен функцией handleConstraint.
Может кто-нибудь дать мне совет?
Спасибо.
Alt ...