gpt4 book ai didi

java - 在 jackson 中将格式错误的日期反序列化为空

转载 作者:行者123 更新时间:2023-12-01 09:35:30 27 4
gpt4 key购买 nike

我有一个 Java Web 应用程序,它使用 Jackson 2.x 来反序列化 JSON 请求。我当前正在与一个外部应用程序交互,该应用程序正在发送其中一个类的一个属性中日期格式不正确的 JSON 数据。这会导致该客户端的调用出现异常(也应该如此)。但是,出于业务原因,我们需要临时解决方法来接受这些请求。

在该客户端修复发送到我的应用程序的数据之前(可能需要一段时间),我希望将该属性中的任何错误日期视为空。我不想更改实际的类本身,因为它是向其他客户端公开的公共(public) API,并且我不希望在该类中包含此临时解决方法。

是否有一种简单的方法可以配置 Jackson 将无效日期视为空?我在 DeserializationFeature 中看到类似的功能,但没有专门为此目的。

最佳答案

需要您在子类中覆盖原始类的 setter 的解决方案:

public class InvalidDateDeserializer extends JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonParser jsonParser,
DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy'T'HH:mm:ss");
String date = jsonParser.getText();
try {
return sdf.parse(date);
} catch (ParseException e) {
return null;
}
}
}

之后,您只需要在类中注释重写 setter 即可

@JsonDeserialize(using = InvalidDateDeserializer.class)

因此新的 DTO 类将如下所示:

public MyModel extends TheirModel {
@Override
@JsonDeserialize(using = InvalidDateDeserializer.class)
public void setProblematicDate() {
super.setProblematicDate();
}
}

我知道这不是神奇的标志解决方案,但它应该适用于您的情况,而无需更改原始 DTO 类。

关于java - 在 jackson 中将格式错误的日期反序列化为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com