2017-11-04 6 views
-1

私はデータベースにデータを格納する休憩サービスを持っています。私のDTOオブジェクトには、タイプのDOBフィールドがあります。 private ZonedDateTime dateOfBirth;私は値で郵便配達からのリクエストを送信するとjsonのZoneddatetimeフィールドをjavaの快適なwebserviceに送信する

@RequestMapping(value = "/save", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<?> createStudent(@Valid @RequestBody StudentDTO studentDto) { 

//I have some more fields in StudentDTO along with dob field. 
} 

私はJsonMappingException(Index cannot be parsed)を取得しています: dateOfBirth":"2017-10-01T01:00

質問:どのように私は必要なフォーマットへの日時フォーマットを変換することができますか? 私は郵便配達員からのリクエストを送信すると、@ RequestBody.Soを使用してデータが自動的にオブジェクトにバインドされるため、変換コードを書かなければならない場合、どうすればこの問題を解決できますか?

+0

依存関係に 'jackson-datatype-jsr310'がありますか?これにより、java-8の日付/時刻クラスを扱えるようにする一連のシリアライザが導入されています。 –

+0

@ JsonDeserialize.Belowを使用してカスタムデシリアライザを作成しました。コードは @JsonDeserialize(= ZonedDateDeserializer.classを使用) private ZonedDateTime date; \tパブリッククラスZonedDateDeserializerは(JsonParserパーサ、DeserializationContextコンテキストが)にIOException { リターンZonedDateTime.parse(parser.readValueAs(String.class))をスローStdDeserializer { 公共ZonedDateTimeをデシリアライズ延びています。 } } 私は以下のエラーが発生しています:文書を読むことができませんでした:テキスト '2017-10-01T01:00 + 0000'をインデックス16で解析できませんでした(参照チェーンを通じて: – narendra

答えて

0

誤った日付形式を使用しているため、このエラーが発生しています。

2017-10-01T01:00は、オフセットセクションを持たないため、ZonedDateTimeには適していません。

正しい表現は、例えば、オフセットしている必要があります:2017-10-01T01:00+02:00、次のコードは正常に動作します:

ZonedDateTime.parse("2017-10-01T01:00+02:00") 

2017-10-01T01:00LocalDateTimeで表すことができると同時に、次の文がエラーなしで完了します。

LocalDateTime.parse("2017-10-01T01:00") 

注:あなたがあなた自身のデシリアライザを記述する必要はありません、永遠にすでに実装されて、ちょうど使用jackson-datatype-jsr310

+0

あなたの返信ありがとうございます。ここで、郵便配達員から「yyyy-mm-dd」という日付を送信すると、これをJavaコードでZoneddatetime形式に変換することができます – narendra

+0

どのような時間帯が必要ですか? –

+0

デフォルトのタイムゾーンに設定できますか? – narendra

関連する問題