71953

[code]

    package com.example.common.validation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.Repeatable;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
    import static java.lang.annotation.ElementType.CONSTRUCTOR;
    import static java.lang.annotation.ElementType.FIELD;
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.ElementType.PARAMETER;
    import static java.lang.annotation.ElementType.TYPE_USE;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    import com.example.common.validation.Xxx.List;
    
    @Documented
    @Constraint(validatedBy = {})
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Repeatable(List.class)
    public @interface Xxx {
        String message() default "{com.example.common.validation.Xxx.message}";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    
        @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
        @Retention(RUNTIME)
        @Documented
        @interface List {
            Xxx[] value();
        }
    }
    
[/code]

複数＠を作成したいのですが、作成が下記であっているのか調べても正解がわからなかったのですが、教えていただきたいです。

[code]

    package com.example.common.validation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.Repeatable;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
    import static java.lang.annotation.ElementType.CONSTRUCTOR;
    import static java.lang.annotation.ElementType.FIELD;
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.ElementType.PARAMETER;
    import static java.lang.annotation.ElementType.TYPE_USE;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    import com.example.common.validation.Xxx.List;
    
    @Documented
    @Constraint(validatedBy = {})
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Repeatable(List.class)
    public @interface Xxx {
        String message() default "{com.example.common.validation.Xxx.message}";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    
        @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
        @Retention(RUNTIME)
        @Documented
        @interface List {
            Xxx[] value();
        }
    }
    
    public @interface Yyy{
        String message() default "{com.example.common.validation.Yyy.message}";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    
        @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
        @Retention(RUNTIME)
        @Documented
        @interface List {
            Yyy[] value();
        }
    }
    
[/code]


CC BY-SA 4.0
2020-11-04T12:35:43.657
71725
2020-11-14T16:17:38.340
2020-11-04T16:38:51.600
3060
32774
question
java
terasolunaを使っての＠追加の仕方


Bean Validationのカスタムアノテーションを2つ(`Xxx`,`Yyy`)作りたいということであれば、`Yyy`の方にも`Xxx`と同様に

[code]

    @Documented
    @Constraint(validatedBy = {})
    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Repeatable(List.class)
    
[/code]

の修飾が必要です。  
(`@Constraint`の`validatedBy`には検証クラスを正しく設定する必要もあります。)

  * <https://docs.jboss.org/hibernate/validator/6.1/reference/en-US/html_single/#validator-customconstraints>

辺りを写経してみると理解が進むのではないかと思います。  
(Bean Validationはフレームワークを利用しなくとも、スタンドアロン環境でも実行確認できます。)


CC BY-SA 4.0
2020-11-14T16:17:38.340
71953
2020-11-14T16:17:38.340
2808
71725
answer