DropWizard 非平凡配置验证
DropWizard non-trivial configuration validation
我有一个具有两个属性的 DropWizard 配置 class。
至少必须设置一个。
这意味着,两者都是 @Nullable
,我需要对整个对象进行验证。
public class MessagingStreamConfiguration extends Configuration
{
@Nullable
private URL baseUrl;
@Nullable
private LinkedHashMap<String, URL> baseUrls;
}
此配置 class 是整个应用程序配置的 属性。
public class ClaConfiguration extends Configuration
{
@Valid
@JsonProperty("messagingStream")
private MessagingStreamConfiguration messagingStreamConfiguration;
我为此设置了 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.";
}
但是对象的验证没有发生。只有它的个别字段。
only relevant DropWizard tests I found, 2nd也只处理字段。
DW的文档doesn't talk about config validation多了。
如何让 DropWizard 验证整个对象?
您有两个选择:
- 使用自定义注释 (
MessagingStreamConfigurationValid
) 注释要验证的 class (ClaConfiguration
)
- 在您的注释中,定位
ElementType.FIELD
,并使用您的自定义注释而不是 @Valid
来注释您的字段
请注意,您需要在注释中 two more attributes 才能使其正常工作:
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
我有一个具有两个属性的 DropWizard 配置 class。
至少必须设置一个。
这意味着,两者都是 @Nullable
,我需要对整个对象进行验证。
public class MessagingStreamConfiguration extends Configuration
{
@Nullable
private URL baseUrl;
@Nullable
private LinkedHashMap<String, URL> baseUrls;
}
此配置 class 是整个应用程序配置的 属性。
public class ClaConfiguration extends Configuration
{
@Valid
@JsonProperty("messagingStream")
private MessagingStreamConfiguration messagingStreamConfiguration;
我为此设置了 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.";
}
但是对象的验证没有发生。只有它的个别字段。
only relevant DropWizard tests I found, 2nd也只处理字段。
DW的文档doesn't talk about config validation多了。
如何让 DropWizard 验证整个对象?
您有两个选择:
- 使用自定义注释 (
MessagingStreamConfigurationValid
) 注释要验证的 class (ClaConfiguration
) - 在您的注释中,定位
ElementType.FIELD
,并使用您的自定义注释而不是@Valid
来注释您的字段
请注意,您需要在注释中 two more attributes 才能使其正常工作:
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };