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

@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> {

}

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

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

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

1
Franken 5 Окт 2018 в 18:08

1 ответ

Лучший ответ

Определите рекомендацию контроллера для глобальной обработки исключений и возврата вашего пользовательского сообщения в виде строки или объекта 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 ;
    }

}
1
kj007 6 Окт 2018 в 10:44