Hibernate проверяет поле @Enumerated (EnumType.STRING) - PullRequest
0 голосов
/ 12 июня 2019

У меня есть POJO с одним из полей, отображенных с помощью hibernate:

@Enumerated(EnumType.STRING)
@Column(name = "status")
private UserStatus status;

Перечисление имеет только 2 возможных значения: Активировано и Деактивировано

В моем контроллере у меня есть этот простой метод для сохранения сущности в БД:

@PostMapping("/save")
private UserDto saveUser(@RequestBody User user){
    return userService.save(user);
}

Если я пытаюсь сохранить пользователя с несуществующим UserStatus, я получаю следующее сообщение об ошибке:

"message": "JSON parse error: Cannot deserialize value of type `com.example.demo.utils.UserStatus` from String \"Deactivated1\": value not one of declared Enum instance names: [Deactivated, Activated]; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.example.demo.utils.UserStatus` from String \"Deactivated1\": value not one of declared Enum instance names: [Deactivated, Activated]\n at [Source: (PushbackInputStream); line: 3, column: 12] (through reference chain: com.example.demo.entity.User[\"status\"])",

Как мне справиться с сериализацией несуществующих значений? Я хочу, чтобы выбрасывать пользовательское исключение в этом случае. Спасибо!

1 Ответ

1 голос
/ 12 июня 2019

Вы можете добавить ExceptionHandler в свой контроллер, например

@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity handleException() {
   // create custom error response
}`

или, если вы хотите справиться с этой ситуацией в целом, для всех контроллеров вы можете использовать ControllerAdvice.

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