Я использую такой объект модели:
@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 ответ
Определите рекомендацию контроллера для глобальной обработки исключений и возврата вашего пользовательского сообщения в виде строки или объекта 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 ;
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].