Пользовательское ConstraintViolationException в весенней загрузке - PullRequest
0 голосов
/ 31 мая 2019

Как перехватить исключение для этого исключения 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 ...

1 Ответ

0 голосов
/ 31 мая 2019

Кажется, вы импортировали javax.validation.ConstraintViolationException вместо org.hibernate.exception.ConstraintViolationException в CustomResponseEntityExceptionHandler. Пожалуйста, импортируйте org.hibernate.exception.ConstraintViolationException, если импортирован неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...