Java DropWizard非平凡配置验证
我有一个DropWizard配置类,它有两个属性。 必须至少设置一个。 这意味着,两者都是Java DropWizard非平凡配置验证,java,configuration,dropwizard,bean-validation,javax.validation,Java,Configuration,Dropwizard,Bean Validation,Javax.validation,我有一个DropWizard配置类,它有两个属性。 必须至少设置一个。 这意味着,两者都是@Nullable,我需要对整个对象进行验证 public class MessagingStreamConfiguration extends Configuration { @Nullable private URL baseUrl; @Nullable private LinkedHashMap<String, U
@Nullable
,我需要对整个对象进行验证
public class MessagingStreamConfiguration extends Configuration
{
@Nullable
private URL baseUrl;
@Nullable
private LinkedHashMap<String, URL> baseUrls;
}
我为此设置了一个javax.validation
:
/**
* Additional validation for non-trivial cases.
*/
private boolean isValid() {
return (this.getBaseUrl() == null
&& (this.getBaseUrls() == null || this.getBaseUrls().isEmpty()));
}
/**
* javax.validation way of validating the whole class.
*/
public static class MessagingStreamConfigurationValidator implements ConstraintValidator<MessagingStreamConfigurationValid, MessagingStreamConfiguration>
{
@Override
public void initialize(MessagingStreamConfigurationValid constraintAnnotation) {
}
@Override
public boolean isValid(MessagingStreamConfiguration conf, ConstraintValidatorContext context) {
return conf.isValid();
}
}
@Constraint(validatedBy = {MessagingStreamConfigurationValidator.class})
@Target({ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MessagingStreamConfigurationValid
{
String message() default "Neither baseUrl nor baseUrls is set. Set baseUrls.";
}
/**
*非平凡案例的附加验证。
*/
私有布尔值isValid(){
返回(this.getBaseUrl()==null
&&(this.getBaseUrls()==null | | this.getBaseUrls().isEmpty());
}
/**
*javax.validation是验证整个类的一种方法。
*/
公共静态类MessagingStreamConfigurationValidator实现ConstraintValidator
{
@凌驾
公共无效初始化(MessagingStreamConfigurationValid ConstraintAnotation){
}
@凌驾
公共布尔值有效(MessagingStreamConfiguration conf、ConstraintValidatorContext上下文){
返回conf.isValid();
}
}
@约束(validatedBy={MessagingStreamConfigurationValidator.class})
@目标({ElementType.TYPE})
@保留(值=RetentionPolicy.RUNTIME)
public@interface MessagingStreamConfigurationValid
{
字符串消息()默认值“未设置baseUrl和baseUrl。请设置baseUrl。”;
}
但对象的验证不会发生。只有一个单独的字段
也只处理字段。DW文档非常有用 如何使DropWizard验证整个对象?您有两个选项:
- 使用自定义注释(
)注释要验证的类(MessagingStreamConfigurationValid
)ClaConfiguration
- 在注释中,以
为目标,并使用自定义注释而不是ElementType.FIELD
@Valid
Class[]groups()默认值{}代码>
ClassInterest,我认为组和负载是特定于示例的。现在我看到它们确实是需要的。我会努力的。
/** * Additional validation for non-trivial cases. */ private boolean isValid() { return (this.getBaseUrl() == null && (this.getBaseUrls() == null || this.getBaseUrls().isEmpty())); } /** * javax.validation way of validating the whole class. */ public static class MessagingStreamConfigurationValidator implements ConstraintValidator<MessagingStreamConfigurationValid, MessagingStreamConfiguration> { @Override public void initialize(MessagingStreamConfigurationValid constraintAnnotation) { } @Override public boolean isValid(MessagingStreamConfiguration conf, ConstraintValidatorContext context) { return conf.isValid(); } } @Constraint(validatedBy = {MessagingStreamConfigurationValidator.class}) @Target({ElementType.TYPE}) @Retention(value = RetentionPolicy.RUNTIME) public @interface MessagingStreamConfigurationValid { String message() default "Neither baseUrl nor baseUrls is set. Set baseUrls."; }