【问题标题】:Constraint validations of DTOs for non-rest methods in SpringBootSpringBoot中非rest方法的DTO约束验证
【发布时间】:2020-06-11 21:17:51
【问题描述】:

我在使用 @PostMaping, @PutMapping 注释的 REST 调用上对 DTO 使用 javax + Hibernate 验证。它确实工作得很好,但是我也有一个地方,我将 2 个对象合并到一个 DTO 中,然后我将它传递给“管理器”层,我很想给参数打上@Valid 注释,我是期待它能够工作,但不幸的是,验证没有启动。 有办法强制吗?

======================更新=====================

我的班级确实在顶部有@Validated 注释。 验证参数的方法是public

我配置了以下 bean:

    @Bean
    public static LocalValidatorFactoryBean defaultValidator() {
        LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
        MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
        factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
        return factoryBean;
    }

    @Bean
    public static MethodValidationPostProcessor methodValidationPostProcessor(Environment environment, Validator validator) {
        MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
        boolean proxyTargetClass = (Boolean)environment.getProperty("spring.aop.proxy-target-class", Boolean.class, true);
        processor.setProxyTargetClass(proxyTargetClass);
        processor.setValidator(validator);
        return processor;
    }



【问题讨论】:

  • 一种方法是使用内置验证器验证 Dto。

标签: spring-boot hibernate-validator


【解决方案1】:

该注释不适用于@RestController 以外的@RequestMapping 类方法,因此我创建了一个虚拟验证器,如下所示:

@Service
@Validated
@Slf4j
public class DTOValidator {

    /**
     * This method triggers DTO validation same way as Spring REST layer does for @RequestMapping method argument.
     */
    public void validate(@Valid DTO dto) {
        log.trace("dto passed the validation = {}", dto);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多