[java][spring]BindingResultでエラー件数が0件になってしまう件について

システム開発Tips

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のバージョン指定には気をつけましょう。

フォローお願いします!

コメント

タイトルとURLをコピーしました