处理@JsonFormat 模式中的异常

问题描述

我正在使用 @JsonFormat 库中的 fasterxml.jackson 注释:

@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd")
private Date endDate;

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

当日期格式不正确时,我不会得到异常,而是得到错误的日期对象(例如,13 月变成了 1 月)。

根据我的研究,我发现了两种可能的解决方案:

  1. 玩弄ObjectMapper。 (使用 setDateFormat 函数
  2. 创建我自己的 Json Deserializer 类,当格式无效时会抛出错误
public class JsonDateDeserializer extends JsonDeserializer<Date> {
    
    public static final String DATE_FORMAT = "yyyy-MM-dd";

    @Override
    public Date deserialize(JsonParser jsonParser,DeserializationContext deserializationContext) throws IOException {
        SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT);
        format.setLenient(false);
        String dateString = jsonParser.getText();
        try {
            return format.parse(dateString);
        } catch (ParseException e) {
            throw new InvalidFormatException(String.format("Date format should be %s",DATE_FORMAT),dateString,Date.class);
        }
    }
}

对于这两种解决方案,我都无法为不同的字段指定不同的格式。

虽然我可以定义多个反序列化器,但在我看来这是一种非常丑陋的方法

我认为 @JsonFormat 注释是为了处理不同字段中不同格式的日期而设计的,但正如我所说,输入无效格式时也不例外。

有人能提出一个优雅的解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)