2017-05-09 8 views
2

ジャクソンのスプリングブートアプリケーションでJSONから日付フィールドを取得しようとしています。マイナスの日付を受け取ったジャクソン

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

それはほとんどの場合のために正常に動作しますが、私は2017から0526を渡すとき、それは自動的に月の10日に変換され、2018年

私は例外をスローします:JSONFormatはこのようになります日付がyyyyMMdd形式でないか、マイナス記号が含まれている場合私はスタックオーバーフローとジャクソンのドキュメントを通過しようとしましたが、何も見つかりませんでした。

なぜJsonFormatは否定的な日付を受け入れますか?

このような回避策はありますか?そのような日付が過ぎると例外がスローされますか?

答えて

3

これは、日付を解析するJavaクラスの問題です。パーサーはデフォルトでのlenientであり、間違っていると思われる日付を解析します。より厳密な解析を行うには、setLenientメソッドを使用してのlenientプロパティをfalseに設定する必要があります。例えば。あなたは@JsonFormat注釈を介してこれを設定することはできません現時点では

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

:日付文字列「2017から0526」でJSONを解析するときに、この設定はInvalidFormatExceptionになります。バージョン2.9.0のための計画があるようです。 Link to issue at github

+1

ありがとうございます。 @JsonFormatは2.9からの寛大な機能をサポートしています。構文を探している人には、この '@JsonFormat(shape = JsonFormat.Shape.STRING、pattern =" yyyyMMdd "、lenient = OptBoolean.FALSE)を使ってください。 – Saheb

関連する問題