java - 在 JUnit 测试中启用 Spring 方法验证

标签 java spring bean-validation spring-validator

我已按照 Spring 4.0.5 文档中的说明使用 Hibernate Validator 5.1 和此(Groovy)配置类在容器中配置 Bean 验证:

@Configuration("validationConfig")
@Import(CreatorConfig)
@ImportResource("/META-INF/spring/mockito-mocks.xml")
static class Config {
    @Bean
    validator() {
        new LocalValidatorFactoryBean()
    }

    @Bean
    mvpp() {
        new MethodValidationPostProcessor()
    }
}

我正在测试的类在引用的 CreatorConfig 类中实例化:

@Configuration
@DependsOn("validationConfig")
static class CreatorConfig {
    @Bean
    ticketCreator(TicketRepository tickets) {
        new UploadTicketCreator(tickets)
    }
}

我将其分离到一个单独的配置类中,因为我认为我需要在创建 UploadTicketCreator bean 之前注册后处理器,该 bean 根据文档进行了注释:

@Validated
public class UploadTicketCreator {
    public UploadTicket createTicket(@Valid CreateTicketRequest request) {
        // do stuff
    }
}

然后我将 UploadTicketCreator 注入(inject)到测试用例中。我已经验证 Autowiring 是否正常运行(该字段已填充,并且其自己的 tickets 字段是 Mockito 模拟)。但是,验证逻辑并未应用于我的创建者 bean,并且注入(inject)的 bean 是没有任何代理的原始 POJO。

我是否缺少验证设置的一部分?是否存在文档中未提及的额外必需步骤?

最佳答案

Spring 配置处理器似乎正在检查 bean 声明的声明返回类型。我使用的是 Groovy 的隐式返回类型,它可能被编译为 Object,并添加 MethodValidationPostProcessor 的显式返回类型,甚至是 BeanPostProcessor 导致了验证需要应用的建议。

关于java - 在 JUnit 测试中启用 Spring 方法验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386100/

相关文章:

java - 使用 Spring + Thymeleaf 时出现 java.lang.StackOverflowError

java - 拒绝后无法清除表单输入

java - Spring 3.1 验证 - 当您有 2 个单独的表单提交和持久模型时如何使用 @valid

JAVA:从文件中读取下一行,排除所有空格

java - Hibernate集合在持久化后为NULL

java - 如何通过采集上一个jsp页面的结果来显示上一个页面的结果?

java - Spring java中的“取决于”

java - 多线程环境下的Spring状态机

hibernate - 电子邮件字符串集合的 JPA 验证

java - 为 SWT Combo 小部件中的每个元素设置工具提示文本