gpt4 book ai didi

spring - 触发 "beforeSave"RepositoryEventHandler 之前的实体验证

转载 作者:行者123 更新时间:2023-12-01 11:21:18 28 4
gpt4 key购买 nike

Spring Data REST docs描述在 RepositoryEventHandler 之后验证实体的方法已解雇:

you simply need to register an instance of your validator with the bean whose job it is to invoke validators after the correct event



有没有办法在实体传递到“beforeSave”之前应用[声​​明性] JSR-303 验证 RepositoryEventHandler ?

从我目前看到的调试情况来看,情况并非如此,“beforeSave” RepositoryEventHandler s 在任何验证发生之前被解雇。

我可以直接在处理程序中编写验证调用,但这与处理“之后”验证的方式不同。

顺便提一句。事件处理程序调用的顺序似乎在 Spring Boot 1.3.8 和 1.5.1 之间发生了变化。过去,验证发生在 @HandleBeforeSave之前。处理程序。在 1.5.1 ValidatingRepositoryEventListener@HandleBeforeSave 之后触发处理程序。

更新:

正如评论中提到的,似乎有一个 ticket在 Spring Data REST 中,Jira 对此持开放态度。

最佳答案

作为解决方法:

  • 创建 PreflightValidatingRepositoryEventListener扩展 ValidatingRepositoryEventListener并用 @Order(Ordered.HIGHEST_PRECEDENCE) 注释它.
    @Component
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class PreflightValidatingRepositoryEventListener extends ValidatingRepositoryEventListener {
    public PreflightValidatingRepositoryEventListener(ObjectFactory<PersistentEntities> persistentEntitiesFactory) {
    super(persistentEntitiesFactory);
    }
    }
  • 添加与 ValidatingRepositoryEventListener 相同的验证器
    @Configuration
    @Import(RepositoryRestMvcConfiguration.class)
    public class Config extends RepositoryRestConfigurerAdapter {

    @Bean
    @Primary
    public Validator validator() {
    return new LocalValidatorFactoryBean();
    }

    @Autowired
    private PreflightValidatingRepositoryEventListener preflightValidatingRepositoryEventListener;

    @Override
    public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
    Validator validator = validator();

    validatingListener.addValidator("beforeCreate", validator);
    validatingListener.addValidator("beforeSave", validator);

    preflightValidatingRepositoryEventListener.addValidator("beforeCreate", validator);
    preflightValidatingRepositoryEventListener.addValidator("beforeSave", validator);
    }
    }

  • NOTE: Validation will be ran twice

    关于spring - 触发 "beforeSave"RepositoryEventHandler 之前的实体验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42498034/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com