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

自定义bean验证不会“@inject”CDI bean,也不会插入消息?

鲜于光辉
2023-03-14

我正在使用GF4进行bean验证。我试图在我的自定义验证器中@注入一个服务bean,但我得到了一个null值。

 public class TestValidator implements ConstraintValidator<>{
   @Inject Service myService;
}

这不是应该和JEE7一起工作吗?

此外,我还试图找到内置的动态消息插值(而不是编写自己的MessageInterpolator)。我确实看到了一些例子,但它们不是很清楚。我要寻找的是从ConstraintValidator传递动态参数。是否有效。例如:

消息_test={value}无效

以某种方式编织它,就像您可以静态地插入注释值一样,例如size_msg={min}-{max}超出范围。

共有1个答案

索曾琪
2023-03-14

是的,一般来说,JavaEE7/Bean Validation 1.1应该可以将依赖项注入到验证器中。

如何执行验证以及如何获得验证器对象?请注意,默认情况下,DI仅适用于容器管理的验证器,即通过@Inject或JNDI查找检索的验证器。如果您自己使用BV引导应用编程接口引导验证器,则此验证器将不启用CDI。

关于消息内插,您可以使用${validatedValue}引用已验证的值。如果您使用HiberNate Validator 5.1.0或更高版本,那么您也可以从ConstraintValidator#isValid()中向消息上下文添加更多对象,如下所示:

public boolean isValid(Date value, ConstraintValidatorContext context) {
    Date now = GregorianCalendar.getInstance().getTime();

    if ( value.before( now ) ) {
        HibernateConstraintValidatorContext hibernateContext =
                context.unwrap( HibernateConstraintValidatorContext.class );

        hibernateContext.disableDefaultConstraintViolation();
        hibernateContext.addExpressionVariable( "now", now )
                .buildConstraintViolationWithTemplate( "Must be after ${now}" )
                .addConstraintViolation();

        return false;
    }

    return true;
}
 类似资料:
  • 试图将RedisTemplate bean与GenericJackson2JsonRedisSerializer一起使用,但是在调试时我注意到Spring会话使用了不同的RedisTemplate实例。 当运行这个时,Spring会话似乎对hashValues使用默认的JdkSerializationRedisSerializer,而不是所需的GenericJackson2JSONRedisSer

  • 我正在制作一个小的原型插件,它每分钟都在增强mob,但这个插件并没有出现在服务器上。 插件作为jar文件导出,并放入服务器的plugins文件夹中。 非常感谢您的帮助。谢谢 我的3个脚本在这里: 主脚本: 听众: 插件。yml:

  • 我试图使用注释和ConstraintValidator接口创建自定义bean验证。目的是使模型的名称独一无二。我不知道为什么,但是当我提交表单以便添加产品时,会抛出NullPointerException。 我的root-context.xml文件:

  • 我正在尝试在laravel中编写用于验证的自定义消息。我在网上查过,看到一些帖子,其他人通过添加一个受保护的函数来解决同样的问题。我还向代码中添加了该函数,但它不起作用。这是我的代码这是myFormController.php: 公共函数请求(注册请求$request){$validated=$request- 这是RegistrationRequest.php: 使用Illumb\Contrac

  • 我试图理解spring中的验证消息和国际化机制,并编写了以下代码: Bean配置: 资源文件系统结构: 消息。属性: messages\u it。属性: 当我提交表单时,得到的错误消息是:{m1}。我是否缺少一些代码?

  • 我有一个名为BigPanel的JPanel子类作为JFrame的内容窗格,在BigPanel对象中有一个嵌套的JPanel子类。单击按钮,嵌套面板应该从一个JPanel子类更改为另一个。嵌套面板没有重置,正确的子类将打印到控制台,但实际面板不会更新包com.grantbroadwater;