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

JSR-303春豆性状注释

韦棋
2023-03-14

使用JSR-303注释在上下文启动时验证Springbean是否有一种简单的方法?我继承了一些将配置表示为JSR-303注释POJO的类。这些都是在对象层次结构中传递的,所以我一直在使用它们。

我可以想象定义bean来设置这样一个类的属性,然后在上下文启动时运行JSR-303验证器,以确保正确设置所有值。

请注意,我不是在问SpringMVC中绑定表单提交的验证问题。

共有2个答案

晏志明
2023-03-14

简而言之,答案是否定的。虽然最初在JSR-303中没有提到,但它通常用于MVC数据绑定和验证。我会尝试以下方法。

因为您有JSR-303注释,所以在Spring上下文中配置JSR-303验证器。在本例中,引导标准JSR-303验证机制的将是LocalValidatoryFactoryBean。请注意,您仍然需要在类路径中提供JSR-303的供应商/实现者(例如Hibernate Validator)。

实现一个应用程序的实例

public class GenericApplicationValidator implements ApplicationListener<ContextStartedEvent> {

  private ValidatorFactoryBean validatorFactoryBean;

  public void onApplicationEvent(ContextStartedEvent e) {
    // Refer to next step
  }

  public void setValidatorFactoryBean(ValidatorFactoryBean vfb) {
    this.validatorFactoryBean = vfb;
  }
}

在ApplicationEvent(ContextStartedEvent e)的方法中:

  1. 获取应用程序上下文的实例

请记住,我没有这样做的经验。但在我看来,这可能是一种接近你所需要的东西的方法。

慕承恩
2023-03-14

如果要在上下文初始化之后执行此验证,可以执行以下操作:

@Component
public class MyValidator ApplicationListener<ContextRefreshedEvent> {

    @Autowired private ListableBeanFactory bf;
    @Autowired private Validator validator;


    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        for (String name : bf.getBeanDefinitionNames()) {
            Object bean = bf.getBean(name);
            validator.validate(bean);
        }
    }
}

但我还没有测试过。

 类似资料:
  • 我的bean中有两个字段 当字段key=“A”,“value”应该跟在其他“key”的特定Regex后面时,它可以是任何内容。 如何根据键定义此值验证。

  • 问题内容: 我有如下测试: 具有以下输出: 但是,我希望注释可以被覆盖,并且不会出现警告。 有没有办法做到这一点? 编辑:我发现一个错误似乎与此有关,但我最终运行4.2.0,仍然得到上述行为。 问题答案: 实际上,JSR-303不支持覆盖验证注释。相反,子类中重写方法的注释将 累积 应用:从规范的3.3节开始:

  • 问题内容: 我刚刚开始测试JSR-303 Bean验证,并且想知道是否有可能。我们的应用程序中有一个用于所有String字段的默认正则表达式。如果我想使用bean验证来应用此功能,我想我需要在表单对象中注释每个字段。 一击是否可以将@Pattern应用于所有字符串(或某些字段)?我们正在WebLogic 10.3.4上使用Hibernate实现,并以JSF2.0为前端。验证应该独立于视图,因为我可

  • 我们正在开发REST服务,并希望使用JSR303进行输入数据验证,但这里的问题是所有模型对象都是从groovy DSL生成的,并将作为jars导入。因此,在对象字段之上编写JSR-303注释没有灵活性。 那么,有没有其他方法可以不用注释使用JSR-303,可以通过XML配置吗?或者在这种情况下,请提供任何验证建议。 谢啦

  • 我有一个用JSR-303约束注释的数据传输对象,比如... 我试图使用注释处理来用属性丰富每个JSR-303约束,该属性的值将等于。 例如,使用上面的代码,字段注释的最终生成输出如下所示... 我想知道上述方法是否可行,或者我是否应该尝试其他方法(这可能更简单)。此外,如果可行的话,可以在上面的处理器的//todo部分中说明要实现什么。到目前为止我已经咨询了... http://today.jav

  • 下午好 我在Bean Validator(JSR 303)中注入服务时遇到问题。我将执行验证,但我需要在数据库中验证此记录; 当我使用我的服务时,它会抛出NullPointerException; 例外: 注释: ValidatorImpl: