Как получить информацию об ошибке из SqlExceptionHelper для весеннего приложения REST - PullRequest
0 голосов
/ 25 марта 2020

В моей базе данных есть несколько таблиц, и я хочу получить информацию о неправильных запросах к базе данных. В случае, если я пытаюсь сохранить сущность с неправильными внешними ключами, я хочу получить подробную информацию об этих ключах.

Например:

2020-03-25 18:37:37.595 ERROR 9788 --- [nio-8090-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: insert or update on table "student" violates foreign key constraint "student_fkey_to_specialty"
  Detail: Key (specialtykey)=(2) is not present in table "specialty".

Я попытался решить с помощью этого кода , но я получаю другую информацию.

could not execute statement; SQL [n/a]; constraint [student_fkey_to_specialty]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

мой код:

@PostMapping
    public void saveStudent(@RequestBody StudentDTO studentDTO) {
        if(studentDTO!=null){
            try {
                studentService.save(studentDTO);

            }catch (Exception|Error e){
                throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getLocalizedMessage(),e );
            }
        }
    }

Ответы [ 3 ]

1 голос
/ 26 марта 2020

Используйте al oop для перехода к исходному исключению, вот пример функции, которая делает это:

private String getCauseMessage(Throwable t)

    Throwable cause = t;
    while (t.getCause() != null) {
        cause = t.getCause();
    }

    return t.getLocalizedMessage();
}

Поскольку вы никогда не знаете, сколько исключений может быть объединено в цепочку, использование al oop самый безопасный способ. Если вы просто используете его напрямую, вы рискуете получить NullPointerException или не получить сообщение с исходным исключением.

0 голосов
/ 25 марта 2020

Я решил эту проблему с помощью этого кода. Это позволяет получать информацию об исключениях из базы данных.

e.getCause().getCause().getLocalizedMessage()
0 голосов
/ 25 марта 2020

Студенческая таблица имеет "student_fkey_to_specialty", которая нарушается. Проверьте, к какому полю подано это ограничение, и укажите правильное значение для этого поля

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