当前位置: 首页 > 知识库问答 >
问题:

JSR303验证不适用于Spring4.0

钱欣悦
2023-03-14

我正在使用spring(4.2.0.RELEASE)、hibernate validator(5.2.1.Final)和validation 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" />

但是没有一个JSR303注释在我的应用程序中工作。

注意:在POJO类上添加了JSR303注释,在服务类(使用POJO)上添加了@Validated注释,还尝试在方法级别添加@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 );
    }
}

共有2个答案

谭玉泽
2023-03-14

重复问题,请阅读此问题

服务层验证

此链接解释了默认情况下,仅在控制器层支持Spring注释验证。对于服务层,要么重用一些Spring组件并调整一些配置,要么滚动自己的AOP。但是我建议选择前者。再利用。

别旻
2023-03-14

有几件事:

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-确保你有

BindingResult在方法上不是必需的,但它会为您提供发现的验证错误,并允许您在返回响应之前对这些错误进行处理。

 类似资料:
  • 我正在尝试使用Hibernate Validator 5.0.1和JSF2.2,但自mojarra版本2.2.3以来,它们的集成似乎被破坏了。我创建了一个小应用程序来演示这个问题,并获得异常“javax.servlet.ServletException:表达式错误:命名对象:未找到javax.faces.Bean”在Tomcat 7.0.42上运行时。 还有其他人有这个问题吗? webapp/页面

  • 我正在尝试在我的Jenkins工具中配置LDAP身份验证。我已经在Jenkins上完成了以下LDAP身份验证的设置,但我仍然无法登录。 服务器:ldaps://rootdc1.myweb.com:636 根DN:dc=myweb,dc=com 提前感谢!

  • 我试图通过将请求参数直接绑定到用户实体来简化我的代码,而不是一个字段一个字段地复制值,但是我似乎不能通过这种方式得到验证。 控制器: 验证器: 模型(注意嵌套对象用@Valid标注): 问题是只有密码和重新密码字段被正确验证,用户类中的验证注释被忽略,任何密码匹配的请求都通过,但它应该会出现错误。空密码或不同的密码会按预期出现错误。

  • 我使用Python和selenium(PhantomJS webdriver)来解析网站,但遇到了问题。 我想从这个电台网站获取当前歌曲:http://www.eskago.pl/radio/eska-warszawa. xpath: 该xpath不适用于python selenium 错误: Traceback(最近一次调用):File"parser4.py",第41行,p.loop()File

  • 我缺少一些真正基本的东西(与EAR或EAR配置中的类加载相关)。我不明白,为什么我的JSR303验证和Hibernate验证不是从EAR内部触发的...如果我创建一个新的战争项目,它就会触发。 我正在Weblogic Server10.3上用Maven、JSF2.0、Open-JPA、EJB3.0建立一个新项目。我使用maven原型创建了所有项目。我有一个最终的EAR构建,它的结构如下: 项目名称

  • 当我在Spring Boot项目的控制器类中使用“@Validated”注释并在Liberty服务器上运行它时,依赖项注入出现中断(它在调用注入变量的行上返回NullPointerException)。如果我在Tomcat上运行这个项目,它工作得很好。如果我在类上注释掉“@Validated”并在Liberty上运行项目,也可以。它只有“@Validated”和自由。有什么想法吗? 以下是我的最小