SpringでのRequestParamsとPathVariablesの検証

1. 前書き

このチュートリアルでは、Spring MVCでHTTP要求パラメーターとパス変数を検証する方法を見ていきます。
具体的には、_String_および__Number __parametersをhttps://beanvalidation.org/1.0/spec/[JSR 303アノテーション]で検証します。
他のタイプの検証について調べるには、link:/javax-validation[Java Bean Validation]およびlink:/javax-validation-method-constraints[methods]に関するチュートリアルを参照してください。制約] link:/spring-mvc-custom-validator [独自のバリデータを作成]の方法を学びます。

2. 設定

Java Validation APIを使用するには、_https://search.maven.org/search?q = a:hibernate-validator%20AND%20g:org.hibernate.validator [hibernate-validatorなどのJSR 303実装を追加する必要があります] _:
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.10.Final</version>
</dependency>
また、* _ @ Validated_アノテーションを追加して、コントローラーの要求パラメーターとパス変数の両方の検証を有効にする必要があります*:
@RestController
@RequestMapping("/")
@Validated
public class Controller {
    // ...
}
*パラメータ検証を有効にするには、_MethodValidationPostProcessor_ bean *も必要であることに注意することが重要です。 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でのパスまたは要求の検証中にエラーが発生すると、デフォルトでHTTP 500応答が返されます。 このチュートリアルでは、https://www.baeldung.com/exception-handling-for-rest-with-spring [_ControllerAdvice_]のカスタム実装を使用して、この種のエラーをより読みやすい方法で処理し、HTTP 400を返します要求の形式が正しくありません。 このソリューションのソースコードは、https://github.com/eugenp/tutorials/tree/master/spring-mvc-simple [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 [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_ packageの注釈を使用して_ @ PathVariable_を検証できます。
Stringパラメーターが空白ではなく、長さが10以下であることを検証する例を考えてみましょう。
@GetMapping("/valid-name/{name}")
public void createUsername(@PathVariable("name") @NotBlank @Size(max = 10) String username) {
    // ...
}
たとえば、10文字より長いa__name_パラメータを使用したリクエストでは、メッセージとともにHTTP 400エラーが発生します。
createUser.name:size must be between 0 and 10
デフォルトのメッセージは、_ @ Size_アノテーションで_message_パラメーターを設定することで簡単に上書きできます。

5. 結論

この記事では、Springアプリケーションで要求パラメーターとパス変数の両方を検証する方法を学びました。
いつものように、すべてのソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-mvc-xml[GitHub]で入手できます。