带有spring组件的javax.validator

问题描述 投票:0回答:1

我在Spring中使用javax.validation。在我的测试(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 unit test issue with Validator

java bean-validation
1个回答
0
投票

随意分享您的知识。这就是我解决这个任务的方法。

我创建了一个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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.