68487
現在Javaのbean validationで独自アノテーションによるバリーデーションを作っています。

<https://qiita.com/shotana/items/42949b88c6c670b1ed22>

上のリンク先を参考にしているのですが、  
メッセージを複数出すにはどうしたらいいでしょうか？

htmlバリデーションの開始タグと閉じタグがあるかどうかのチェックをしたくて、その際の「開始タグがありません」と「終了タグがありません」を出し分けたいです。

messageにエラーメッセージは入れるのですが、defaultだけでなく複数を出し分けるにはどうしたらいいでしょうか？  
メッセージのセット方法が知りたいです。

わかる方よろしくお願いします
CC BY-SA 4.0
2020-07-10T14:28:57.380
68475
2020-07-11T01:55:22.137
40231
question
java
独自アノテーションでエラーメッセージを出し分けたい
[`ConstraintValidatorContext`](https://docs.jboss.org/hibernate/validator/6.1/reference/en-
US/html_single/#_the_code_constraintvalidatorcontext_code) を利用することで実現できます。

検証処理は適当ですが、次のような感じの実装になります:

```

    public class TagOpenCloseValidator implements ConstraintValidator<TagOpenClose, String> {
    
        @Override
        public boolean isValid(final String value, final ConstraintValidatorContext context) {
            // デフォルトのメッセージを抑制する
            context.disableDefaultConstraintViolation();
            return isValidOpen(value, context) & isValidClose(value, context);
        }
    
        // 開始タグの検証
        private boolean isValidOpen(final String value, final ConstraintValidatorContext context) {
            final boolean ret = value.contains("<mytag>");
            if (!ret) {
                context.buildConstraintViolationWithTemplate("開始タグがありません").addConstraintViolation();
            }
            return ret;
        }
    
        // 終了タグの検証
        private boolean isValidClose(final String value, final ConstraintValidatorContext context) {
            final boolean ret = value.contains("</mytag>");
            if (!ret) {
                context.buildConstraintViolationWithTemplate("{com.github.yukihane.so.validation.TagOpenClose.noclose}")
                    .addConstraintViolation();
            }
            return ret;
        }
    }
    
```

[サンプル実装](https://github.com/yukihane/stackoverflow-qa/tree/master/jaso68475)
CC BY-SA 4.0
2020-07-11T01:55:22.137
68487
2020-07-11T01:55:22.137
2808
68475
answer