Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在@handlebefore之前运行验证_Spring_Spring Boot_Spring Data Rest - Fatal编程技术网

Spring 在@handlebefore之前运行验证

Spring 在@handlebefore之前运行验证,spring,spring-boot,spring-data-rest,Spring,Spring Boot,Spring Data Rest,我在使用Spring Rest进行验证时遇到一些问题,@handlebeforreacreate事件处理程序在验证之前正在运行。我希望它在验证后运行 在我的测试应用程序中,我有一个事务,它有两个字段来存储事务值,一个用于实际事务货币,另一个用于转换为用户货币的最终值。在创建之前的句柄中,我正在处理转换,但是如果金额为空,我希望请求在验证器中停止 我可以在事件处理程序中验证资源(我已经准备好处理RepositoryConstraintViolationException),但这会让我想到如何使用验

我在使用Spring Rest进行验证时遇到一些问题,@handlebeforreacreate事件处理程序在验证之前正在运行。我希望它在验证后运行

在我的测试应用程序中,我有一个事务,它有两个字段来存储事务值,一个用于实际事务货币,另一个用于转换为用户货币的最终值。在创建之前的句柄中,我正在处理转换,但是如果金额为空,我希望请求在验证器中停止

我可以在事件处理程序中验证资源(我已经准备好处理RepositoryConstraintViolationException),但这会让我想到如何使用验证器。在每个数据rest请求上,spring循环检查所有验证器是否支持对象类,这也有点低效

对EventHandler的验证是否优于验证器(出于性能原因)?如何强制验证程序在EventHandler之前运行

*我使用的是spring boot 1.4.2.0版本

验证器

编辑 我检查了源代码,并按照以下顺序调用侦听器:

实际上,在运行验证程序之前,使用BeforeCreateHandler是修复/更改实体中某些内容的唯一方法。我100%接受输入。

1。使用@Validated(未对其进行测试) 您可以这样做:

@HandleBeforeCreate
public void beforeCreate(@Validated Transaction transaction) {
    adjustTransactionAmount(transaction);
}
2.否则-您可以通过Java配置定义
验证程序
你可以从@MathiasDpunkt()中找到这个答案:


谢谢你的回答!我没有解决“验证程序在处理程序之前运行”的问题,但它帮助我理解了如何使用bean hibernate bean验证。@RafaelTeles你让它工作过吗?你有什么解决方案吗?Hello@masT,我不记得我是如何设置的,但您可以在控制器/事件处理程序代码中的任何位置抛出RepositoryConstraintViolationException,该异常将具有与验证器相同的效果
@Component
@RequiredArgsConstructor
@RepositoryEventHandler(Transaction.class)
public class TransacationEventHandler {

    private final CurrencyUnitService currencyUnitService;

    @HandleBeforeCreate
    public void beforeCreate(Transaction transaction) {
        adjustTransactionAmount(transaction);
    }

    @HandleBeforeSave
    public void beforeSave(Transaction transaction) {
        adjustTransactionAmount(transaction);
    }

}
@HandleBeforeCreate
public void beforeCreate(@Validated Transaction transaction) {
    adjustTransactionAmount(transaction);
}
@Configuration
public class MyValidationConfiguration extends RepositoryRestConfigurerAdapter {

    @Bean
    @Primary
    /**
     * Create a validator to use in bean validation - primary to be able to autowire without qualifier
     */
    Validator validator() {
        return new LocalValidatorFactoryBean();
    }

    @Override
    public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener
validatingListener) {
        Validator validator = validator();
        //bean validation always before save and create
        validatingListener.addValidator("beforeCreate", validator);
        validatingListener.addValidator("beforeSave", validator);
    }
}