この記事の内容
- Spring MVCで@PathVariableを使っている
- 受け取った値のバリデーションを実施する
ポイント
- hibernateのBean生成コードを明示的に記述する
環境
- Java11
- Spring MVC 5.3.21
pom(抜粋)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.21</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
正しい使い方
ググったらすぐ出てくるとおり、まずは以下の手順を踏む。
- Controllerクラスに@Validatedをつけることにより、クラスとメソッドのバリデーションを有効化する。
- メソッドの@PathVariableに@Sizeなどのルールを追加する。
@Validated
@RestController
public class TestController {
@PostMapping(value = "{code}")
public ResponseEntity<ConsumerResponse> index(@PathVariable("code") @Size(min = 32, max = 32) String code)
上記に追加してhibernateのBean生成コードを明示的に記述します。
@EnableWebMvc
@Configuration
@ComponentScan("com.baeldung.spring")
public class ClientWebConfig implements WebMvcConfigurer {
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
Spring Bootならもっと簡単にできる
Springの場合は簡単に実装できます。
Spring Bootアプリケーションは、先ほど作成したBeanが自動構成されます。
これは、クラスパスにhibernate-validatorの依存関係があることにより自動的にハイバネのクラスが実行されるためです。
ネットで検索して出てくる記述は大体SpringBoot向けの記述になっているので、MVCだとそのままでは動かないんですね。