.jdbc4.MySQLIntegrityConstraintViolationException: повторяющаяся запись в Spring JPA для @Column (unique = true) - PullRequest
0 голосов
/ 06 мая 2020
@Column(unique = true) 
private String name;

Мне нужно написать @ExceptionHandler для обработки исключения DataIntegrityViolationException через @RestControllerAdvice, и ожидаемый результат должен быть таким.

Ожидаемый результат: - {"name": "Admin_User уже существует"}

Пробовал с кодом ниже: -

@ExceptionHandler(DataIntegrityViolationException.class)
public ResponseEntity<?> dataIntegrityException(DataIntegrityViolationException exception) {
    String exceptionMessage = exception.getMostSpecificCause().getMessage();
    String responseMessage = exceptionMessage.substring(exceptionMessage.indexOf("'") + 1);
    responseMessage = responseMessage.substring(0, responseMessage.indexOf("'"));
    HashMap<String, String> errorMap = new HashMap<>();
    errorMap.put("UniqueConstraint", responseMessage + " already exists");
    return new ResponseEntity<>(errorMap, HttpStatus.CONFLICT);
}

Результат: -

{"UniqueConstraint": "Asd12345 уже существует"}

Как могу ли я заменить «UniqueConstraint» на общий ключ c. Таким образом, он выбирает объект, который генерирует исключение ниже.

Может ли кто-нибудь помочь с получением ожидаемого результата как: - Ожидаемый результат: - {"name": "Asd12345 уже существует"}

Как получить имя в качестве ключа в ответе?

Исключение: -

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'simple_role1a1qa1' for key 'UK_8sewwnpamngi6b1dwaa88askk'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_181]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_181]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_181]
    at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:1.8.0_181]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.46.jar:5.1.46]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...