У меня есть класс конфигурации DropWizard, который имеет два свойства.
По крайней мере, один должен быть установлен.
Это означает, что оба @Nullable
, и мне нужна проверка всего объекта.
public class MessagingStreamConfiguration extends Configuration
{
@Nullable
private URL baseUrl;
@Nullable
private LinkedHashMap<String, URL> baseUrls;
}
Этот класс конфигурации является свойством всей конфигурации приложения.
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.";
}
Но валидация объекта не происходит. Только это отдельные поля.
только соответствующие релевантные тесты DropWizard, которые я обнаружил , 2nd , также работают только с полями.
Документация DW не говорит о проверке конфигурации .
Как я могу заставить DropWizard проверять весь объект?