SpringでのRequestParamsとPathVariablesの検証
1. 序章
このチュートリアルでは、SpringMVCでHTTPリクエストパラメーターとパス変数を検証する方法を見ていきます。
具体的には、StringおよびNumberパラメーターをJSR303アノテーションで検証します。
他のタイプの検証については、 Java Bean Validationおよびメソッド制約に関するチュートリアルを参照するか、独自のバリデーターを作成する方法を学習してください。
2. 構成
Java Validation APIを使用するには、hibernate-validatorなどのJSR303実装を追加する必要があります。
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.10.Final</version>
</dependency>
また、 @Validatedアノテーションを追加して、コントローラーでリクエストパラメーターとパス変数の両方の検証を有効にする必要があります。
@RestController
@RequestMapping("/")
@Validated
public class Controller {
// ...
}
パラメータ検証を有効にするには、MethodValidationPostProcessorbeanも必要であることに注意してください。 Spring Bootアプリケーションを使用している場合、このbeanは自動構成されます。これは、クラスパスにhibernate-validatorの依存関係があるためです。
それ以外の場合、標準のSpringアプリケーションでは、このBeanを明示的に追加する必要があります。
@EnableWebMvc
@Configuration
@ComponentScan("com.baeldung.spring")
public class ClientWebConfigJava implements WebMvcConfigurer {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
// ...
}
Springでのパスまたは要求の検証中にエラーが発生すると、デフォルトでHTTP500応答が発生します。 このチュートリアルでは、 ControllerAdvice のカスタム実装を使用して、この種のエラーをより読みやすい方法で処理し、不正なリクエストに対してHTTP400を返します。 このソリューションのソースコードは、GitHub。にあります。
3. RequestParamの検証
数値の平日をリクエストパラメーターとしてコントローラーメソッドに渡す例を考えてみましょう。
@GetMapping("/name-for-day")
public String getNameOfDayByNumber(@RequestParam Integer dayOfWeek) {
// ...
}
私たちの目標は、dayOfWeekの値が1から7の間であることを確認することです。 そのために、@Minおよび@Maxアノテーションを使用します。
@GetMapping("/name-for-day")
public String getNameOfDayByNumber(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {
// ...
}
これらの条件に一致しないリクエストは、デフォルトのエラーメッセージとともにHTTPステータス400を返します。
たとえば、 http:// localhost:8080 / name-for-day?dayOfWeek = 24 を呼び出すと、応答メッセージは次のようになります。
getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7
カスタムメッセージを追加することで、デフォルトのメッセージを変更できます。
@Max(value = 1, message = “day number has to be less than or equal to 7”)
4. PathVariableの検証
@ RequestParam、と同様に、 javax.validation.constraints パッケージの任意のアノテーションを使用して、@PathVariableを検証できます。
文字列パラメータが空白ではなく、長さが10以下であることを検証する例を考えてみましょう。
@GetMapping("/valid-name/{name}")
public void createUsername(@PathVariable("name") @NotBlank @Size(max = 10) String username) {
// ...
}
たとえば、 name パラメータが10文字を超えるリクエストは、次のメッセージを含むHTTP400エラーになります。
createUser.name:size must be between 0 and 10
@Size アノテーションでメッセージパラメーターを設定することにより、デフォルトのメッセージを簡単に上書きできます。
5. 結論
この記事では、Springアプリケーションでリクエストパラメータとパス変数の両方を検証する方法を学びました。
いつものように、すべてのソースコードはGitHubで入手できます。