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) {
回答1件
あなたの回答
tips
プレビュー