在@jsonformat模式中处理异常

fquxozlt  于 2021-07-15  发布在  Java
关注(0)|答案(0)|浏览(356)

我用的是 @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月)。
根据我的研究,我发现了两种可能的解决方案:
玩弄 ObjectMapper . (使用setdateformat函数)
创建我自己的json反序列化程序类,当格式无效时将引发错误:

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 注解被设计用来处理不同字段中的不同日期格式,但正如我所说的,当输入无效格式时也不例外。
有人能为这个问题提出一个优雅的解决方案吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题