2017-05-09 72 views
2

我想在傑克遜的春季啓動應用程序中從JSON獲取日期字段。該JSONFormat看起來是這樣的:傑克遜接受否定日期

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

它工作正常的大多數情況下,但是當我通過2017-0526,它會自動將其轉換到5月10日,2018年

我想拋出異常如果日期不是yyyyMMdd格式或包含減號。我嘗試過堆棧溢出和Jackson文檔,但找不到任何東西。

爲什麼JsonFormat接受否定日期?

是否有任何解決方法,以便它在此類日期通過時拋出異常?

回答

3

這是解析日期的底層Java類的問題。該解析器默認爲寬鬆的,並將解析看起來錯誤的日期。對於更嚴格的解析,您需要使用setLenient方法將寬鬆的屬性設置爲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

+1

感謝它現在的工作。 @JsonFormat支持2.9的寬鬆功能。對於尋找語法的人來說,使用這個@JsonFormat(shape = JsonFormat.Shape.STRING,pattern =「yyyyMMdd」,lenient = OptBoolean.FALSE)。 – Saheb