我正在使用spring(4.2.0.RELEASE),hibernate验证器(5.2.1.Final)和验证api(1.1.0.Final)进行JSR验证,以便使用以下配置进行后端应用,
<bean id="validatorFactory" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean class="org.springframework.expression.spel.standard.SpelExpressionParser" />
但是JSR 303注释都没有在我的应用程序中工作。
注意:在POJO类上添加了jsr 303注释,在服务类上添加了@Validated(使用POJO)也尝试在方法级别添加@Validated。
更新:服务接口
@Validated
public interface SampleService {
@NotNull
@Valid
Account getAccount( @NotNull @Valid String customerKey, @NotNull String name);
服务实施
@Service
@Validated
@Transactional( readOnly=true )
public class SampleServiceImpl
implements SampleService
{
private final SampleDao sampleDao;
@Inject
public SampleServiceImpl( SampleDao sampleDao)
{
this.sampleDao= sampleDao;
}
@Override
@Validated
public Customer getAccount( String customerKey, String name)
{
try {
return sampleDao.getAccount( customerKey, name);
}
catch ( EmptyResultDataAccessException e ) {
throw new NotFoundException( e );
}
}
答案 0 :(得分:0)
有一些事情:
1-你需要验证POJO,所以创建一个POJO并用你想要的验证注释它,即:
public class Customer {
@NotNull
private String name;
@NotNull
private String customerKey;
...
}
2- @Valid注释需要在实现上:
@Override
public Customer getAccount(@Valid Customer customer, BindingResult bindingResult) {}
3-确保Spring xml上有<mvc:annotation-driven/>
。
您的方法不需要BindingResult,但它会为您提供发现的验证错误,并允许您在发回响应之前对它们执行某些操作。
答案 1 :(得分:0)
重复的问题,请阅读本文
此链接说明默认情况下,仅在控制器层支持spring注释验证。对于服务层,您只需重用一些弹簧组件并调整一些配置或滚动自己的AOP。但我建议只选择前者。 REUSE。