Как развернуть Custom RuntimeException из Json Mapping Exception - PullRequest
0 голосов
/ 23 октября 2019

В проекте отдыха данных весной я использую пользовательскую исключительную ситуацию RuntimeException, которая вызывается в пользовательском десериализаторе

public class LocalDateDeserializer extends StdDeserializer<LocalDate> {
 ...
    @Override
    public LocalDate deserialize(JsonParser jsonparser, DeserializationContext context) throws IOException, JsonProcessingException {
        String date = jsonparser.getText();
        String name = jsonparser.getCurrentName();
        try {
            return LocalDate.parse(date, DateTimeFormatter.ISO_LOCAL_DATE);
        } catch (DateTimeParseException e) {
            throw new ApiJacksonException("error on: " + name);
        }
    }
}

Мой класс User.class

@Data
@NoArgsConstructor
public class User extends Auditing implements Serializable {
    private static final long serialVersionUID = 1L;
 ...
    @DateTimeFormat(iso = ISO.DATE)
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate birthdate;
}

Когда я отправляю запрос POST сНеправильный формат даты @ControllerAdvice перехватывает пользовательское исключение RuntimeException

Но когда я отправляю запрос PATCH с неверным форматом даты, появляется сообщение о том, что исключение RuntimeException заключено в JsonMappingException и не может быть перехвачено @ControllerAdvice вфайл свойств, который я установил

spring.jackson.deserialization.wrap-exceptions = false

Я что-то пропустил!

1 Ответ

1 голос
/ 26 октября 2019

Решено, действительно, запрос на обновление (patch / put) с недопустимым форматом даты вызовет HttpMessageNotReadableException, который оборачивает пользовательское RuntimeException, в @ControllerAdivce мы должны переопределить handleHttpMessageNotReadable

@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
    if(ex.getCause() instanceof ApiJacksonException) {
        // execute custom code...
    }
    return super.handleHttpMessageNotReadable(ex, headers, status, request);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...