杰克逊接受负面日期

时间:2017-05-09 07:35:28

标签: java date spring-boot jackson

我正试图在Jackson的spring-boot应用程序中从JSON获取一个日期字段。 JSONFormat看起来像这样:

@NotNull(message = ValidationErrors.NOT_BLANK_MESSAGE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd")
private Date date;

大多数情况都适用,但当我通过2017-0526时,会自动将其转换为2018年5月10日。

如果日期不是yyyyMMdd格式或包含减号,我想抛出异常。我尝试过堆栈溢出和Jackson文档,但无法找到任何内容。

为什么JsonFormat会接受否定日期?

是否有任何解决方法,以便在传递此类日期时抛出异常?

1 个答案:

答案 0 :(得分:3)

这是解析日期的基础Java类的问题。解析器默认为 lenient ,并将解析看似错误的日期。要进行更严格的解析,您需要使用setLenient方法将 lenient 属性设置为false。例如。解析带有日期字符串“2017-0526”的JSON时,此设置将导致InvalidFormatException

ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setLenient(false);
mapper.setDateFormat(df);

目前您无法通过@JsonFormat注释进行配置。对于版本2.9.0,似乎有一个计划。 Link to issue at github

相关问题