JavaのSpringで使う@Lengthアノテーション入門ガイド!初心者でもわかる入力チェック
生徒
「Springで文字列の長さを制限してチェックする方法はありますか?」
先生
「はい、@Lengthアノテーションを使えば、文字列の最小長さや最大長さを簡単に指定できますよ。」
生徒
「例えばパスワードが8文字以上でないとダメ、というルールも書けますか?」
先生
「もちろん可能です。実際のコード例を一緒に見ていきましょう。」
1. @Lengthアノテーションとは?
@Lengthアノテーションは、Hibernate Validatorが提供している文字列専用のバリデーションアノテーションです。JavaのSpringアプリケーションでフォーム入力をチェックするときによく使われ、文字列が一定の範囲の長さに収まっているかどうかを検証します。例えば「ユーザー名は3文字以上50文字以下」といったルールを簡単に定義できます。
2. @Lengthアノテーションの基本的な使い方
実際のコードでは、DTOやエンティティのフィールドに@Lengthを付与して使います。以下のサンプルはユーザー名を検証する例です。
import org.hibernate.validator.constraints.Length;
import jakarta.validation.constraints.NotBlank;
public class UserForm {
@NotBlank(message = "ユーザー名は必須です")
@Length(min = 3, max = 50, message = "ユーザー名は3文字以上50文字以内で入力してください")
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
この例では必須入力の@NotBlankと組み合わせることで、空入力も防止しつつ長さ制限を行っています。
3. @Lengthと@Sizeの違い
@Lengthとよく似たアノテーションに@Sizeがあります。@Sizeはコレクションや配列にも利用できますが、@Lengthは文字列専用です。そのため、文字列に特化したバリデーションを書くときには@Lengthを使う方がわかりやすくなります。
4. Spring MVCでのバリデーション処理
Spring MVCのコントローラで@ValidとBindingResultを利用すれば、@Lengthによるチェックは自動的に行われます。以下は入力フォームの検証例です。
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import jakarta.validation.Valid;
@Controller
public class UserController {
@GetMapping("/user")
public String showForm(UserForm userForm) {
return "userForm";
}
@PostMapping("/user")
public String submitForm(@Valid UserForm userForm, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "userForm";
}
model.addAttribute("username", userForm.getUsername());
return "success";
}
}
このように記述すれば、エラー時には自動的にエラーメッセージが処理されます。
5. エラーメッセージのカスタマイズ
@Lengthアノテーションではmessage属性を指定することで、わかりやすい日本語メッセージを表示できます。初心者向けには「〇文字以上〇文字以内で入力してください」と具体的に伝えるのがおすすめです。
@Length(min = 8, max = 20, message = "パスワードは8文字以上20文字以内で入力してください")
private String password;
6. 入力チェックの実用例
実際のアプリケーションでは、ユーザー登録フォームやブログ記事のタイトル入力などさまざまな場面で@Lengthが使われます。以下のように複数フィールドに適用してバリデーションを強化できます。
@Length(min = 5, max = 100, message = "タイトルは5文字以上100文字以内で入力してください")
private String title;
@Length(min = 10, max = 1000, message = "本文は10文字以上1000文字以内で入力してください")
private String content;
7. HTMLフォームとの連携
HTMLフォームの入力欄にmaxlengthを設定しておくと、フロントエンドでも入力制限をかけられます。これをSpringの@Lengthと併用すれば、より安全で使いやすいフォームが作れます。
<form action="/user" method="post">
<label for="username">ユーザー名</label>
<input type="text" id="username" name="username" maxlength="50" required />
<button type="submit">送信</button>
</form>
8. 初心者が理解しておきたいポイント
初心者がSpringの@Lengthアノテーションを使う際に押さえておきたいポイントは以下の通りです。
- 文字列の長さ制限に特化したバリデーション
- @NotBlankと組み合わせて必須入力もチェック
- @Sizeとの違いを理解して使い分ける
- エラーメッセージはわかりやすい日本語にカスタマイズする
- フロントエンドとサーバーサイドで二重チェックを行うと安心
これらを理解すれば、実際の開発現場でも@Lengthを活用して安全で信頼性の高い入力フォームを実装できます。