Postman経由でJSONの下に送信した後、dateDateJoining値(String型)を「DateInput」クラスのメンバー変数「dateOfJoining」(Date型)にバインドする方法Java dd/MM/yyyyと同じ形式のStringをDateオブジェクトに変換する方法。変換された日付は、StringではなくDateオブジェクトにある必要があります。
Jsonは以下のとおりです
{
"dateOfJoining" : "03/04/2017"
}
PostmanでのサービスURLヒット-localhost/Rest/hello
Java-HandleRestRequest.JavaのRestServiceクラス
@RestController
public class HandleRestRequest
{
@RequestMapping("\hello");
public List setRequestParams(@RequestBody DateInput dateInput)
{
.......
}
}
Pojo Class DateInput.Java
public class DateInput
{
private Date dateOfJoining;
.......
}
以下の形式でjsonから日付を送信すると、満たされていない入力としてそのエラーがスローされます
{
"dateOfJoining" : 04/04/2017
}
だから私はそれを文字列形式として送信し、DateInput.JavaファイルのdateOfJoiningを文字列として変更してから、後で以下のように日付オブジェクトとして変換しようとしました
DateInput.JavaファイルをDateからStringに変更
public class DateInput
{
private String dateOfJoining;
.......
}
変更されたJSON
{
"dateOfJoining" : "04/04/2017"
}
ユーザー入力を文字列から日付に変換するコード
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String convertedDate = sdf.format(dateInput.getDateOfJoining());
必要な形式に変換しますが、戻り値の型はStringですが、DAOレイヤーを送信するDateオブジェクトが期待されます。だから私はsdf.parseを試してみました、その戻り値のDateオブジェクトが必要な形式ではありません
Date date = sdf.parse(sdf.format(dateInput.getDateOfJoining()));
output is like - Tue Apr 04 00:00:00 IST 2017
expected is 04/04/2017 (with return type Date object).
DAOレイヤーはdd/MM/yyyy形式の日付オブジェクトとして入力を期待しているため、文字列を必要な形式の日付オブジェクトに変換する方法を教えてください
編集:更新された質問に従って回答を更新します。
注釈を使用する@JsonFormat
from Jackson Databind から日付パターンを指定します。
public class DateInput
{
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MM-yyyy")
private Date dateOfJoining;
.......
}
コードを以下のコードスニペットに変更します
public List setRequestParams(@RequestParam("dateOfJoining")@DateTimeFormat(pattern="dd-MM-yyyy") DateInput dateInput)
{
...
}