アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

入力チェック:未入力時に空文字が渡される仕様を回避する。STS 3.8.3(Spring Boot 1.5.1)+thymeleaf 

String Boot + thymeleaf ・・というかSpring MVCでは、テキストボックスを未入力な状態で、Submitした時に、空文字(””)をセットする仕様になっています。

 

なので、@NotNullアノテーションをつけても、未入力の時にエラーになってくれないんですという話を前に書きました。

arakan-pgm-ai.hatenablog.com

 

この時は、とりあえず@NotNull以外に@Size(min=1)をつけて、なんとなく必須入力っぽくやったんですが、実は、このパターンで対応できない場合があります。

 

例えば、任意入力でかつサイズ制限をつけたい時です。

 

ありますよね。任意入力だから未入力のときはスルーしたいわけです。でも、入力された時には、@Size(min=6,Max=20)みたいに、6文字より少ない場合はエラーにしたいようなケースは。

 

ところが、未入力で空文字("")が返ってしまうと、この文字数が少ない場合のエラーにひっかかってしまって、未入力のときにスルーするのが実現できません。

 

やっぱり、未入力の場合は空文字(””)でなく、NULLを返すのが必要な場合があるわけです。

 

一応、方法はあるので、今回はそれをやってみます。

 

方法自体は簡単で、コントローラクラスに以下のメソッドを追加するだけです。

@InitBinder
public void initbinder(WebDataBinder binder){
       binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

 

こうすると、 registerCustomEditorが入力データをトリム(余分な空白を削除)して、未入力の場合はNULLに変換してFormに渡してくれます。

 

コントローラクラスに、このメソッドを仕込むと、Formクラスの必須入力は@NotNullアノテーションだけでOKになります。

@NotNull
private String inputPid;
public String getInputPid() {
      return inputPid;
}

public void setInputPid(String inputPid) {
      this.inputPid = inputPid;
}

 

こんな感じです。 

f:id:arakan_no_boku:20170323225433j:plain

 

これができれば、任意入力のサイズチェックも可能なので、さっきのPID入力チェックを以下のように書き直します。

@Size(min=6,max=20)
private String inputPid;

 

ちなみに、今回の対応をしていない場合は、@Sizeの指定だけで、なんとなく必須入力チェック+桁数チェックもできていました。空文字がmin=6の部分でひっかかってくれましたからね。

 

でも、Nullが戻るようになると、それができなくなります。必須チェックが必要な場合は、以下のように、@NotNullアノテーションをつける必要がありますので、注意してください。

@NotNull
@Size(min = 6,max=20)
private String inputPwd;

 

これで実行してみます。

まず、両方共未入力でやってみます。

f:id:arakan_no_boku:20170323232908j:plain

 

PIDの未入力がスルーされて、パスワードで必須入力にひっかかっているのがわかります。

 

今度は、4文字だけPIDに入力して、エラーにかかるかやってみます。

f:id:arakan_no_boku:20170323233102j:plain

 

うまく行ってますね。

 

このやり方を覚えると、入力チェックのバリエーションが増えます。コントローラクラスに毎回書かないといけないのは、面倒ですが、標準の入力チェックアノテーションを、直感的に使えるので、個人的にはこっちのやり方をメインにした方が良いな・・とは思ってます。

 

 


 STS  3.8.3(Spring Boot 1.5.1)+thymeleaf 関連記事

 

入力画面に関連する記事

画像をSUBMITボタン代わりに使う

ラジオボタンとラジオボタングループを使う 

ラジオボタンとラジオボタングループを使う 

チェックボックスを使う。 

HTMLのタグの閉じ忘れで例外が発生する!

プルダウンリストとマルチセレクトボックスを使う。

今度はテキストエリアで複数行入力する。 

テキストボックスの入力と基本的なチェックを使う。

 

参照画面・画面遷移に関連する記事

参照画面:テーブルを使い、行毎に色分けした一覧表を表示する。 

参照画面:条件に一致した時のみHTML要素を出力する。

セッションを使って画面間で情報を受け渡す 

画面遷移:GET時のリクエストパラメータを受け取る 

日本語しか使わなくても、i18N対応はする意味がある。

 

入力チェックに関連する記事

入力チェック:未入力時に空文字が渡される仕様を回避する。 

入力チェック:@Patternと正規表現で独自チェックする。

入力チェック:アノテーション定義を自分で作る。(再利用版)

入力チェック用アノテーション定義を自分で作る。(独自実装版)

入力チェック:複数項目の相関チェックアノテーションの作り方

 

データアクセス・その他に関連する記事

データアクセス:Jprepositoryを使って簡単にCRUDする。 

データアクセス:ネイティブなSQL文を実行する 

クラスパス内の静的ファイルにアクセスする 

SpringBootだとログの書き出しも楽ちんです。 

SpringBootプロジェクトでJUNIT4を使った単体テストをする。

 

f:id:arakan_no_boku:20170404203859j:plain