Breaking News

Default Placeholder Default Placeholder

はじめに

ウェブアプリケーションを作ってるとリクエストパラメータのバリデーションを行いたくなりますよね。それも、できれば簡単にしたい、という思いは皆一律にあると思います。

本記事では、Spring FrameworkのREST APIでリクエストパラメータのバリデーションを行う方法をまとめます。

筆者の環境

  • Spring Framework 5.2.3
  • Java 17

前提

  • Spring Frameworkで動くプロジェクトがある

やること

  1. DependenciesでValidationを追加する
  2. Resourceクラスを作成する
  3. ControllerクラスでResourceを取り入れる

1. DependenciesでValidationを追加する

  • STSからは以下の画面で Validationを選択することで追加ができます
  • build.gradledependensies に以下が含まれていたらOKです
implementation 'org.springframework.boot:spring-boot-starter-validation'

2. Resourceクラスを作成する

  • リクエストパラメータをチェックするResourceクラスを作成します
  • 今回は簡単に、入力された名前(name)で従業員のデータを新規作成するために、名前パラメータのチェックをするクラスを作成します
@Service
public class CreateEmployeeRequestResource implements Serializable {

    private static final long serialVersionUID = 1L;

    @NotNull(message = "name is null")
    @Size(min = 1, max = 128, message = "name length must be between 1 and 128")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
	this.name = name;
    }
}
  • @NotNullは、nameはNULLではないことをチェックするアノテーションです
  • @Sizeは、文字列の長さを制限するアノテーションです
    • 今回はnameは1から128文字であることをチェックすることにします
  • 各チェックの messageは、もしチェックに引っかかった場合に出力するエラーメッセージを書くことができます。
  • これでResourceクラスはOKです

3. ControllerクラスでResourceを取り入れる

  • Controllerでパラメータを自動でResourceクラスに取り込み、バリデーションを実行するように設定します
@RestController
@RequestMapping("employees")
public class EmployeeController {
	
    @Autowired
    CreateEmployeeService createEmployeeService;
	
	
    @RequestMapping(method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED)
    public void create(@Validated @RequestBody CreateEmployeeRequestResource newResource) {
	createEmployeeService.create(newResource);
    }
}
  • これで準備OKです 👍