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