1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ConfigurationPropertiesとValidatedを使う

Last updated at Posted at 2021-01-20

はじめに

  • Springで環境変数にバリデーションをかけたい方
  • Springで実行時引数などでバリデーションをかけたい方に読んでいただきたいです
  • 他にもよりよい実装があると思うので、参考程度にお読みください
  • 今回はSpringBatchで実装していますが、SpringWebでも使えます

環境

利用ライブラリ バージョン 備考
java 11
spring-boot-starter-parent 2.3.0.RELEASE
org.projectlomok 1.18.12 javaの決まり文句を省略してくれて、コードディングが楽になるので使ってます
javax.validation 2.0.1.Final バリデーションで利用
org.hibernate 5.3.6.Final バリデーションで利用

実装

要件

  • バッチの実行時に引数として都道府県コード(1〜47)が渡される
  • 都道府県コード以外が渡されたら、DBへSQLを叩かずにバッチを終了させたい

実装内容

環境変数や実行時引数参照用のPropertyクラスを作成する

SampleArgsProperties.java
@Validated
@lombok.Getter
@lombok.RequiredArgsConstructor
@ConstructorBinding
@ConfigurationProperties(prefix = "extension.sample.batch-alpha")
public class SampleBatchAlphaArgsProperties {

   @NotNull
   @Min(value = 1)
   @Max(value = 47)
   private final Integer areaCode;

   @Nullable
   @Min(value = 300)
   private final Long hoge;
}

エラー

  • javaの実行時引数に 50 を与えると以下のエラーが吐かれる
    • -Dextension.sample.batch-alpha.area-code=50
Caused by: org.springframework.boot.context.properties.bind.validation.BindValidationException: Binding validation errors on extension.sample.batch-alpha
   - Field error in object 'extension.sample.batch-alpha' on field 'areaCode': rejected value [50]; codes [...

説明

  • RequiredArgsConstructor + ConstructorBinding の組み合わせを利用し Setter を省略
  • ConfigurationPropertiesValue アノテーションを省略
  • javax.validationMinMax を利用してバリデーション

最後に

  • @RequiredArgsConstructor + @ConstructorBinding の組み合わせが最高
  • if文を使わずにバリデーションできた
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?