Как перехватить исключение @JsonFormat весной и изящно обработать его для обработки полезной нагрузки? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть приложение Spring, в котором я использую аннотацию @JsonFormat для десериализации формата даты. Но когда я отправляю массив элементов, вся полезная нагрузка завершается ошибкой, даже если одна из записей имеет недопустимую дату.

Есть ли способ, которым я могу обойти это, изящно обработав это исключение, либо заменив сбойную дату значением по умолчанию, либо проигнорировав эту запись массива.

Jackson.version: 2.7.5, spring.version: 5.0.0.RELEASE

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private Date date;

1 Ответ

1 голос
/ 13 марта 2019

Вы можете написать собственный десериализатор для своего класса, где вы устанавливаете значение по умолчанию на случай, если что-то пойдет не так. Что-то вроде:

public class MyJsonDateDeserializer extends JsonDeserializer<Date>
{
    @Override
    public Date deserialize(JsonParser jsonParser,
            DeserializationContext deserializationContext) throws IOException, JsonProcessingException {

        SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
        String date = jsonParser.getText();
        try {
            return format.parse(date);
        } catch (ParseException e) {
            return new Date();
        }

    }

}

Тогда в вашем классе вы можете сделать что-то вроде:

class MyClass {
    //...Fields

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
    @JsonDeserialize(using = MyJsonDateDeserializer.class)
    private Date date;

    //...Fields
}

Вы также можете добавить @JsonIgnoreProperties(ignoreUnknown = true) к вашему классу, если знаете, что его значение не всегда необходимо.

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