カスタムアノテーションを書く(タイプレベルの注釈)方法を選択して検証することができます(いくつかのプロパティのうちの1つがヌルでない必要があります)?私はここでのコードの正確必要に応じて一枚持っているように@Notnull Springカスタム注釈バリデーション複数のフィールドを持つ
-1
A
答えて
2
この「質問」は非常に広い場合でも、私は答えを与える:
public class ChoiceValidator implements ConstraintValidator<Choice, Object> {
private String[] properties;
private boolean allowMultiple;
@Override
public void initialize(Choice constraintAnnotation) {
if (constraintAnnotation.value().length < 2) {
throw new IllegalArgumentException("at least two properties needed to make a choice");
}
properties = constraintAnnotation.value();
allowMultiple = constraintAnnotation.multiple();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
try {
BeanInfo info = getBeanInfo(value.getClass());
long notNull = Stream.of(properties)
.map(property -> Stream.of(info.getPropertyDescriptors())
.filter(desr -> desr.getName().equals(property))
.findAny()
.orElse(null)
)
.map(prop -> getProperty(prop, value))
.filter(Objects::nonNull)
.count();
return allowMultiple ? notNull != 0 : notNull == 1;
} catch (IntrospectionException noBean) {
return false;
}
}
private Object getProperty(PropertyDescriptor prop, Object bean) {
try {
return prop.getReadMethod() == null ? null : prop.getReadMethod().invoke(bean);
} catch (ReflectiveOperationException noAccess) {
return null;
}
}
}
:ここ
@Target(ElementType.TYPE)
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = ChoiceValidator.class)
public @interface Choice {
String[] value();
boolean multiple() default false;
String message() default "{com.stackoverflow.validation.Choice.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
をBeanのプロパティへのアクセスを使用してバリデータ
@Data
@Choice({"one", "two"})
class OneOf {
private String one;
private String two;
private String whatever;
}
@Data
@Choice(value = {"one", "two"}, multiple = true)
class AnyOf {
private String one;
private String two;
}
:
典型的な使い方は、(ゲッターとセッターを生成する注釈ロンボク島)のように見ることができます
しかし、明確にする:Stackoverflowは、開発者が知識を交換するためのQAコミュニティです。 "あなたは私のためにこれを無料でコードしてください"と尋ねる場所ではありません。すべての有益な貢献者は、まず問題を最初に解決しようとし、後に詳細な質問をします。質問に答える人々は余暇を過ごし、支払われません。将来的には、具体的な問題を尋ね、自分の努力を示して敬意を表してください。
+0
アルネありがとう! –
+0
@vinvinもしこれがあなたに有益なのであれば、アップアップのことを考えてみてください。 –
関連する問題
- 1. Spring mvc注釈検証のカスタム注釈
- 2. カスタム注釈のSpring REST検証
- 3. Javaのカスタム注釈集約複数の注釈
- 4. フィールド値を持つ注釈クエリセット
- 5. 注釈@Column(nullable = false)vs @NotNullの差
- 6. JPA:同じ値を持つフィールドの注釈をバンドルする注釈を指定する
- 7. Springでカスタム注釈を実装する
- 8. 機密データのカスタム注釈
- 9. Spring AOP注釈付きフィールドのポイントカット式
- 10. Springコンテキストでメソッドレベルのカスタム注釈を見つけよう
- 11. デフォルトの引数を持つマクロ注釈
- 12. 複数の注釈
- 13. ** kwargsで複数の型を持つ注釈
- 14. PowerMock SuppressStaticInitializationFor注釈で複数のクラスを持つ方法
- 15. 複数のパラメータを持つ注釈定義
- 16. Rails 3バリデーション、複数のフィールド
- 17. カスタム注釈エラー
- 18. カスタム注釈スウィフト
- 19. カスタム注釈
- 20. Springに注釈を付ける方法複雑なオブジェクトを持つ@RequestMapping複雑なオブジェクトを持つ@RequestMapping
- 21. スマートコンストラクタのみを持つレコード構文フィールド型注釈
- 22. JPA 2.0フィールド注釈対メソッド注釈
- 23. Guice複数の注釈
- 24. カスタム注釈キュウリjvm
- 25. カスタム注釈プロセッサ - Java
- 26. カスタム注釈Seabornヒートマップ
- 27. BeanPostProcessorを使用したSpringのカスタム注釈
- 28. オブジェクトのsymfony2カスタム注釈
- 29. Skobblerのカスタム注釈マップ
- 30. JSF 2.0必須フィールドのデコレータ@NotNullを持つプロパティの場合
実際の質問ではないのはなぜですか?(http://meta.stackoverflow.com/q/284236) – EJoshuaS
[2つ以上のフィールドをどのように検証できますか?組み合わせ?](http://stackoverflow.com/questions/2781771/how-can-i-validate-two-or-more-fields-in-combination) –