javax.validator с пружинным компонентом - PullRequest
0 голосов
/ 11 апреля 2019

Я использую javax.validation с Spring.В моем тесте (groovy) я явно создаю валидатор.

import javax.validation.Validation
import javax.validation.Validator
import javax.validation.ValidatorFactory

ValidatorFactory factory = Validation.buildDefaultValidatorFactory()
Validator validator = factory.getValidator()

when:
Set<ConstraintViolation<User>> constraints = validator.validate(entity)

Мой валидатор в java

public class EntityDynamicValidator implements ConstraintValidator<SomeConstraint, Entity> {

    private GroupService groupService;

    // This constructor is required, see the link bellow.
    public UserDynamicEnumValidator() {
    }

    public UserDynamicEnumValidator(final GroupService groupService) {
        this.groupService = groupService;
    }

    @Override
    public boolean isValid(final Entity entity, final ConstraintValidatorContext context) {
        Something something = groupService.findByValue(entity.getValue());
        // Validate all this stuff
    }
}

Мне нужно передать сервис Spring в валидатор.

У меня есть конструктор по умолчанию, потому что есть проблема Проблема модульного теста Spring с Validator

1 Ответ

0 голосов
/ 11 апреля 2019

Не стесняйтесь делиться своими знаниями. Вот как я решил эту задачу.

Я создал компонент Spring, и он имеет статическое поле (GroupService, которое инициализируется в конструкторе).

@Component // Spring component.
class ServiceHolderComponent {

    private static GroupService GROUP_SERVICE;

    @Autowired4
    public ServiceHolderComponent(final GroupService groupService) {
        GROUP_SERVICE = Validate.notNull(groupService); //apache lib
    }

    public static GroupService getGroupService() {
        return GROUP_SERVICE;
    }
}

А теперь валидатор с конструктором по умолчанию.

public class EntityDynamicValidator implements ConstraintValidator<SomeConstraint, Entity> {

    private GroupService groupService;

    public UserDynamicEnumValidator() {
        this(ServiceHolderComponent.getGroupService());
    }

    public UserDynamicEnumValidator(final GroupService groupService) {
        this.groupService = groupService;
    }

    @Override
    public boolean isValid(final Entity entity, final ConstraintValidatorContext context) {
        Something something = groupService.findByValue(entity.getValue());
        // Validate all this stuff
    }
}
...