Been Validationでリクエスト値の検証してくれない
またmavenでハマりました。(mavenでハマったというのも解決してからわかったことですが
結論から言うと、またpom.xmlに記述したバージョンが間違っていました。
うーん、何回目。
やりたかったこと
以下ようなコードでSpringでBeen Validationを利用した入力値検証をやりたかったのです。
// フォーム
public class PostForm implements Serializable {
@NotNull
private String id;
}
// コントローラ
public String update(@ModelAttribute("form") @Valid Form form, BindingResult bindingResult) {
サンプル載せてくれているサイトでは上記のように定義してidを未入力でリクエスト投げたらできるよ!と書いてあったのですが、まぁみごとに一向にエラーを検出してくれずhasErrosの結果見ても
errors 0!!!
を連呼してくるのでずっと悩んでいました。
<mvc:annotation-driven />が指定されているかとか引数の順番変えたりとかしたのですが、そもそも並びに問題があれば、
直後に指定されていない場合は、検証後に結果をバインドできず、org.springframework.validation.BindExceptionがスローされる。
とあったので、そもそも例外発生するよねということでもやもやしてた。
の、ですが大体の例でhibernate-validatorのバージョンを5にしていたのを思い出してバージョン下げてみたら動きました。くそー!
解決方法
最新でええやろ!と思って、hibernate-validatorのバージョンを7.0.0.CR1にしてたら全然チェックしてくれないまま動くようです。。。
何故かするっと動くのですよ。
<!-- 動かない -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.0.CR1</version>
</dependency>
<!-- 動く -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.6.Final</version>
</dependency>
pom.xmlのバージョン指定には気をつけましょう。
コメント