質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

6964閲覧

springでの独自バリデーション

uruban

総合スコア24

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2017/12/03 09:55

編集2017/12/04 01:11

Springの独自バリデーションについて教えてください。

下記ページを参考に独自バリデーションを実装しましたが、
動いてくれませんでした。
SpringMVCで独自Validationチェックをする

デバッグで実行して、Controllerで止めてみると、
formのprice(バリデーション対象)には、"ABC"という値が入っていますが、
BindingResultにはエラーがなく(数字でないためエラーになる認識)、
NumberValidator.javaのブレークポイントは止まらない状況です。

org.springframework.validation.BeanPropertyBindingResult: 0 errors
となっており、result.hasErrors()としても、falseになる状況です。

バリデーションが機能しない理由がわかりますでしょうか?

■NumberValid.java

java

1import java.lang.annotation.ElementType; 2import java.lang.annotation.Retention; 3import java.lang.annotation.RetentionPolicy; 4import java.lang.annotation.Target; 5 6import javax.validation.Constraint; 7import javax.validation.Payload; 8 9@Target({ElementType.METHOD,ElementType.FIELD, ElementType.ANNOTATION_TYPE}) 10@Retention(RetentionPolicy.RUNTIME) 11@Constraint(validatedBy = NumberValidator.class) 12public @interface NumberValid { 13 String message() default "0~9の数値のみ入力してください"; 14 Class<?>[] groups() default{}; 15 Class<? extends Payload>[] payload() default{}; 16 17 @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE }) 18 @Retention(RetentionPolicy.RUNTIME) 19 20 @interface List { 21 NumberValid[] value(); 22 } 23}

■NumberValidator.java

java

1import javax.validation.ConstraintValidator; 2import javax.validation.ConstraintValidatorContext; 3 4public class NumberValidator implements ConstraintValidator<NumberValid,String>{ 5 6 @Override 7 public void initialize(NumberValid nv){ 8 } 9 10 @Override 11 public boolean isValid(String nv,ConstraintValidatorContext cxt){ 12 if(nv == null){ 13 return false; 14 } 15 return nv.matches("[0-9*]"); 16 } 17}

■Form

java

1@NumberValid 2private String price;

■Controller

java

1@RequestMapping(value = "/test",method=RequestMethod.POST) 2public String test(@ModelAttribute @Valid TestForm testForm, BindingResult result,Model model) {

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/03 16:13

BindingResult でエラーを確認できないってこと?
uruban

2017/12/04 01:11

>BindingResult でエラーを確認できないってこと? そうです。org.springframework.validation.BeanPropertyBindingResult: 0 errorsとなっており、result.hasErrors()としても、falseになる状況です
sho_jonas

2017/12/04 02:09

標準にあるバリデーション(Patternとか)は機能しているのでしょうか?
uruban

2017/12/04 04:48 編集

>標準にあるバリデーション(Patternとか)は機能しているのでしょうか? @Sizeで確認しましたが、動かなかったため、色々調べたところ、必要なライブラリーがなかったため、pom.xmlに追加したところ、独自バリデータ含め、動きました。
guest

回答1

0

自己解決

必要なライブラリーがなかったため、pom.xmlに追加したところ、独自バリデータ含め、動きました
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.1.Final</version>
</dependency>

投稿2017/12/04 04:48

uruban

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問