0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaの日付型 java.sql.Timestampについて

Last updated at Posted at 2024-10-04

はじめに

日付の入力値を検証する際、java.sql.Timestamp型 を使用すると
BindingResultでは意図しない影響を及ぼす事が判明したので備忘録として記載。

入力値を受け取るフォーム

DateMoldForm.java
@Data
@NoArgsConstructor
public class DateMoldForm {
   private Timestamp timestampMold;
   private LocalDateTime datetimeMold;

   public DateMoldForm(VerificationDateMold entity) {
       this.timestampMold = entity.getTimestamp_mold();
       this.datetimeMold = entity.getDatetime_mold();
   }

影響について

必須入力ではない、日付を空文字で登録した場合Timestamp型ではエラーが発生する。
image.png

これはアノテーションによるチェックではなく
フォームから送信された値をコントローラーのオブジェクトにバインド(型変換)する際に失敗しており、BindingResultでは型変換失敗のエラーも含んでいる事が分かりました。
※String→Timestampに型変換するConverterは存在しませんでした。
https://docs.spring.io/spring-framework/docs/4.2.0.RC2_to_4.2.0.RC3/Spring%20Framework%204.2.0.RC3/index.html?org/springframework/core/convert/support/package-summary.html

必須入力ではないためでチェック対象から外す。
解決策として@DateTimeFormatアノテーションを付与。
引数に日付フォーマットを指定し挙動に問題がないかを確認する。

@DateTimeFormat の確認

DateMoldFormを修正し、登録ボタンを押下し結果を確認する。

DateMoldForm.java
@Data
@NoArgsConstructor
public class DateMoldForm {
   @DateTimeFormat(pattern = "yyyy-MM-dd")
   private Timestamp timestampMold;

   @DateTimeFormat(pattern = "yyyy-MM-dd")
   private LocalDateTime datetimeMold;

   public DateMoldForm(VerificationDateMold entity) {
       this.timestampMold = entity.getTimestamp_mold();
       this.datetimeMold = entity.getDatetime_mold();
   }
}

結果

image.png

エラーは発生しなくなったが、Timestamp型が NULL で登録されている事が分かりました。
java.sql.Timestampjava.time.LocalDateTime
バリデーションだけではなく@DateTimeFormatを付与して登録する場合も影響を及ぼす事が分かりました。

MariaDB [spring_practice]> select * from verification_date_mold;
+---------------------+---------------+
| timestamp_mold      | datetime_mold |
+---------------------+---------------+
| 2024-10-02 19:12:07 | NULL          |
+---------------------+---------------+

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?