Spring JPA-репозиторий с проверкой бина: плохая реакция на ошибку - PullRequest
0 голосов
/ 05 октября 2018

Я использую объект модели следующим образом:

@Entity
public class Address {

    @Id
    @GeneratedValue
    private long id;

    @NotNull
    @Size(min = 1, max = 20)
    private String location;

    @OneToOne(mappedBy = "address")
    private Person person;
}

с хранилищем

@RepositoryRestResource(collectionResourceRel = "address", path = "address")
public interface AddressRepository extends PagingAndSortingRepository<Address, Long> {

}

Когда я пытаюсь опубликовать объект, который нарушает ограничения бина, я получаю плохоеОтвет об ошибке:

{"отметка времени": "2018-10-05T14: 48: 23.667 + 0000", "статус": 500, "ошибка": "Внутренняя ошибка сервера", "сообщение": «Не удалось зафиксировать транзакцию JPA; вложенным исключением является javax.persistence.RollbackException: Ошибка при фиксации транзакции», «path»: «/ address»}

Как получить полезное сообщение об ошибкебез реализации каждого контроллера покоя самостоятельно?

1 Ответ

0 голосов
/ 06 октября 2018

Определите рекомендации контроллера для обработки исключений глобально и возврата вашего пользовательского сообщения в виде строки или ErrorResponse объекта (где вы можете определить свои собственные свойства).

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RollbackException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public String handleRollbackException(RollbackException ex) {

        String errorMessage = "Your custom message";
        return errorMessage ;
    }

}
...