

いつもお世話になっております。  
SpringBootアプリケーションを実行しますと、  
以下エラーが発せします。  
原因がわかりませんので、ご存知の方がいらっしゃれば対応方法を教えてください。

【エラー】

[code]

    Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [com.sample.MyData] during persist time for groups [javax.validation.groups.Default, ]
    List of constraint violations:[
        ConstraintViolationImpl{interpolatedMessage='電話番号の入力が不正です。', propertyPath=memo, rootBeanClass=class com.sample.MyData, messageTemplate='電話番号の入力が不正です。'}
    ]
        at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:138) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:78) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:197) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:75) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    
[/code]

【Phone.javaの内容】

[code]

    @Documented
    @Constraint(validatedBy=PhoneValidator.class)
    @Target({ElementType.METHOD,ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @ReportAsSingleViolation
    public @interface Phone {
        String message() default "電話番号の入力が不正です。";
        Class<?>[] groups() default {};
        Class<? extends Payload>[] payload() default{};
        boolean onlyNumber() default false;
    }
    
[/code]

【PhoneValidator .javaの内容】

[code]

    public class PhoneValidator implements ConstraintValidator<Phone, String> {
        private boolean onlyNumber = true;
    
        @Override
        public void initialize(Phone phone){
            this.onlyNumber=phone.onlyNumber();
        }
    
        @Override
        public boolean isValid(String input,ConstraintValidatorContext cxt){
            if(input == null){
                return false;
            }
            if(this.onlyNumber){
                return input.matches("[0-9]*");
            }
            else{
                return input.matches("[0-9()-]*");
            }
        }
    }
    
[/code]

【MyData.java】の内奥

[code]

    public class MyData {
    
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        @Column
        private Long id;
    
        @Column(length=50,nullable=false)
        @NotEmpty
        private String name;
    
        @Column(nullable=true)
        private Integer age;
    
        @Column(length=200,nullable=true)
        private String mail;
    
        @Column(nullable=true)
        @Phone(onlyNumber=true) // ←左記の記述を@Phoneにするエラーは発生しません。
        private String memo;
    
[/code]

以上です。  
よろしくお願いいたします。


CC BY-SA 3.0
2017-12-23T14:51:51.343
40501
2017-12-23T15:32:02.960
2017-12-23T15:32:02.960
754
26758
question
java spring spring-boot
Spring boot 独自Validatorの作成でエラーが発生します。