Spring 在@handlebefore之前运行验证
我在使用Spring Rest进行验证时遇到一些问题,@handlebeforreacreate事件处理程序在验证之前正在运行。我希望它在验证后运行 在我的测试应用程序中,我有一个事务,它有两个字段来存储事务值,一个用于实际事务货币,另一个用于转换为用户货币的最终值。在创建之前的句柄中,我正在处理转换,但是如果金额为空,我希望请求在验证器中停止 我可以在事件处理程序中验证资源(我已经准备好处理RepositoryConstraintViolationException),但这会让我想到如何使用验证器。在每个数据rest请求上,spring循环检查所有验证器是否支持对象类,这也有点低效 对EventHandler的验证是否优于验证器(出于性能原因)?如何强制验证程序在EventHandler之前运行 *我使用的是spring boot 1.4.2.0版本 验证器 编辑 我检查了源代码,并按照以下顺序调用侦听器: 实际上,在运行验证程序之前,使用BeforeCreateHandler是修复/更改实体中某些内容的唯一方法。我100%接受输入。1。使用@Validated(未对其进行测试) 您可以这样做:Spring 在@handlebefore之前运行验证,spring,spring-boot,spring-data-rest,Spring,Spring Boot,Spring Data Rest,我在使用Spring Rest进行验证时遇到一些问题,@handlebeforreacreate事件处理程序在验证之前正在运行。我希望它在验证后运行 在我的测试应用程序中,我有一个事务,它有两个字段来存储事务值,一个用于实际事务货币,另一个用于转换为用户货币的最终值。在创建之前的句柄中,我正在处理转换,但是如果金额为空,我希望请求在验证器中停止 我可以在事件处理程序中验证资源(我已经准备好处理RepositoryConstraintViolationException),但这会让我想到如何使用验
@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);
}
}