私はJavaの初心者です。私は日付を取得するためDate
クラスを使用していた、要求にSpring Bootでリクエストの3桁の時間を拒否する方法は?
{
"appointmentDate":"2017-05-30",
"appointmentTime":"23:30:00"
}
を、JSONで次の形式で日付と時刻を取得
、私はこれをやっていた上記のリクエストクラスで@NotNull(message = "appointmentDate is required")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date appointmentDate;
@NotNull(message = "appointmentTime is required")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss")
private String appointmentTime;
ました時間をStringと見なします。
サービスクラスでは、文字列オブジェクトを日付オブジェクトに変換しようとしています。次に、テーブルを検索して、テーブル内の予定リストを検索しようとしています。
// convert into string
String dateString = null;
SimpleDateFormat sdfr = new SimpleDateFormat("yyyy-MM-dd");
dateString = sdfr.format(appointmentDate);
String dt = dateString + " " + appointmenTime;
Date startDateAndTime = null;
try {
//startDateAndTime = yyyyMMddFormat.parse(yyyyMMddFormat.format(dt));
startDateAndTime = new SimpleDateFormat(Constants.DATEANDTIME).parse(dt);
} catch (ParseException e) {
throw new IllegalArgumentException("Illegal date format");
}
しかし、私が直面している問題は、間違った日付を入力しても出力が得られることです。日付のエラーで解析例外がスローされません。
{
"appointmentDate":"20171-05-30",
"appointmentTime":"231:30:00"
}
私はあなたがあなたの日付と時間のために近代的なクラスLocalDate
とLocalTime
を使用することをお勧めすることを許可し、これは私の定数
public static final String DATEANDTIME = "yyyy-MM-dd HH:mm:ss";
であり、これは私のリポジトリのクエリで、
@Query(value = "select COUNT(a.doctorId) from Appointment a WHERE a.doctorId = :doctorId AND a.scheduleFromTime = :appointmentDateTime")
Long findAppointmentExists(@Param("doctorId") Long doctorId,
@Param("appointmentDateTime") Date appointmentDateTime);
SimpleDateFormatは非常に堅牢で、何かを処理します。それは有効な日付ではありませんか? –
何の定数?日付と時間の値ですか? – Jerry06
補足として、SimpleDateFormatは日付と時刻を扱うことができるので、2つの文字列を一緒に追加してから、yyyy-MM-dd HH:mm:ssを使用して –