Java 如何在spring中捕获@JsonFormat异常并优雅地处理它以处理负载?

Java 如何在spring中捕获@JsonFormat异常并优雅地处理它以处理负载?,java,spring,jackson,Java,Spring,Jackson,我有一个spring应用程序,其中我使用@JsonFormat注释来反序列化日期格式。但是,当我发送一个元素数组时,即使其中一个条目的日期无效,我的整个有效负载也会失败 是否有一种方法可以通过优雅地处理此异常来超越此限制,即使用默认值替换失败日期或忽略该数组条目 杰克逊版本:2.7.5, spring.version:5.0.0.RELEASE 您可以为您的类编写一个自定义,在其中设置一个默认值,以防出现错误。比如: public class MyJsonDateDeserializer ext

我有一个spring应用程序,其中我使用@JsonFormat注释来反序列化日期格式。但是,当我发送一个元素数组时,即使其中一个条目的日期无效,我的整个有效负载也会失败

是否有一种方法可以通过优雅地处理此异常来超越此限制,即使用默认值替换失败日期或忽略该数组条目

杰克逊版本:2.7.5, spring.version:5.0.0.RELEASE

您可以为您的类编写一个自定义,在其中设置一个默认值,以防出现错误。比如:

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
}

如果您知道并不总是需要@JsonIgnorePropertiesignoreUnknown=true的值,那么还可以在类上添加@JsonIgnorePropertiesignoreUnknown=true

请在问题中添加您的实现。我的意思是您如何使用注释JsonFormat以及它将以什么格式出现,因此您会看到异常。同样可以理解的是,您有一个强制字段,它在反序列化中失败,因此我们不能在附加值或空值上使用JsonIgnore。我相信我使用的格式没有多大关系。在我的场景中,每当我发送错误的格式时,我都希望它得到处理。无论如何,我还是要添加@JsonFormat注释。谢谢,让我试试这个,但是我必须同时添加@JsonFormat和@JsonDeserialize吗?是的,你必须同时添加这两个注释。尝试了,看起来不错。将答案标记为正确。我注意到的一件事是,即使我删除了@JsonFormat注释,控件也会转到MyJsonDateDeserializer Yes。因为您添加了@JsonDeserialize,它基本上说,在将json字符串转换为对象之前,始终要通过这个类。因此,流将转到MyJsonDeserializer
class MyClass {
    //...Fields

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

    //...Fields
}