- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个自定义 ConstraintValidator:
public class FooValidator implements ConstraintValidator<ValidFoo, String> {
@Override
public void initialize(final ValidFoo foo) {
// No-op
}
@Override
public boolean isValid(final String foo, final ConstraintValidatorContext context) {
}
}
我希望能够通过 Dropwizard run
或 initialize
中的 ServiceConfiguration
传递一些配置来初始化此类。
这可能吗?
最佳答案
首先,值得注意的是即将发布的 Dropwizard 2.0.0 版本有 built in support for this
<小时/>目前,该过程有点复杂。您基本上想要重新引导 Hibernate 验证,但使用支持注入(inject)的自定义约束 validator 工厂。
它将涉及大约 4 个自定义类,所以请耐心等待。这里是:
首先,我们首先注册一个自定义功能,将此功能包装到我们的 Application
类中:
public void run(MainConfiguration config, Environment environment) throws Exception {
// ...
environment.jersey().register(InjectingValidationFeature.class);
}
现在我们定义该功能:InjectingValidationFeature
- 它基本上在服务容器中注册我们的自定义实现:
public class InjectingValidationFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
context.register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ValidatorFactory.class).to(Validator.class).in(Singleton.class);
bind(InjectingConfiguredValidator.class).to(ConfiguredValidator.class).in(Singleton.class);
bind(InjectingConstraintValidatorFactory.class).to(ConstraintValidatorFactory.class).in(Singleton.class);
}
});
return true;
}
}
现在我们定义上面注册的那些类。让我们从核心部分开始,InjectingConstraintValidatorFactory
,Hibernate Validator 将实际使用它来创建约束 validator 。请注意,因为我们正在容器中注册它们,所以我们实际上已经可以开始注入(inject)东西了,这是我们的自定义 ConstraintValidatorFactory
,它利用服务定位器来使依赖项注入(inject)成为可能:
public class InjectingConstraintValidatorFactory implements ConstraintValidatorFactory {
private final ServiceLocator serviceLocator;
@Inject
public InjectingConstraintValidatorFactory(ServiceLocator serviceLocator) {
this.serviceLocator = serviceLocator;
}
@Override
public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
return this.serviceLocator.createAndInitialize(key);
}
@Override
public void releaseInstance(ConstraintValidator<?, ?> instance) {
this.serviceLocator.preDestroy(instance);
}
}
现在我们的中心 javax.validation.Validator
接口(interface)工厂:
public class ValidatorFactory implements Factory<Validator> {
private final ConstraintValidatorFactory constraintValidatorFactory;
@Inject
public ValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) {
this.constraintValidatorFactory = constraintValidatorFactory;
}
@Override
public Validator provide() {
return Validation.byDefaultProvider().configure().constraintValidatorFactory(
this.constraintValidatorFactory).buildValidatorFactory()
.getValidator();
}
@Override
public void dispose(Validator instance) {
// Nothing
}
}
最后,我们的 InjectingConfiguredValidator
,请注意它如何仅使用 DropwizardConfiguredValidator
,但使用 @Inject
这将允许我们从以下位置接收 validator 我们上面的 ValidatorFactory
:
public class InjectingConfiguredValidator extends DropwizardConfiguredValidator {
@Inject
public InjectingConfiguredValidator(Validator validator) {
super(validator);
}
}
就是这样。通过上述内容,我们成功地在 Jersey 中注册了一个注入(inject)感知的 Validator
,并注册到我们的服务容器中,这样您也可以在任何地方 @Inject Validator
并按照您喜欢的方式使用它.
关于Java Dropwizard 初始化 ConstraintValidator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284731/
我在我的项目中使用 bean-validation,我想为现有的约束注释编写一个自定义验证器。 例如,我有一个表示名为 CustomDateTime 的日期/时间的类。 .在使用此类作为例如出生日期的
您能告诉我如何创建也适用于单个字段和集合的自定义约束 validator 吗? 例如,我有一个对象 Foo,其中包含状态枚举 public class Foo { Status status;
假设我有一个自定义 ConstraintValidator: public class FooValidator implements ConstraintValidator { @Overr
我已经阅读了一些关于如何使用 Hibernate 的 ConstrainValidator 的问答和指南(例如 Hibernate Documentation ),但没有一个明确提及如何在 a 的特定
如果您熟悉 Bean 验证框架,您就会知道无法获取方法参数的名称。因此,如果您对方法的第一个参数执行 @NotNull 约束并且验证失败,则 getPropertyPath 将类似于“arg1”。 我
我已经在测试中模拟了 EntityManager。 但现在我也需要在我的真实类中模拟 EntityManager(自定义约束注释的 validator )。 在测试中我这样做 @RunWith(Moc
是否可以在嵌套到 @interface 定义的 ConstraintValidator 中使用依赖注入(inject)? 我创建了需要验证一些数据的自定义注释。 CodebookValidator 只
由于应用程序的架构,我需要将约束注释与其实现分离。当未显式设置 validatedBy 属性时,我正在考虑使用 @Size 注释中使用的方法: @Target({ METHOD, FIELD, ANN
了解后Hibernate Custom Validators ,它让我对一个主题产生了兴趣,我是否可以创建一个基本注释,我可以在其中设置要使用的 validator ? @Target({ Eleme
现在我正在开发我的 spring+hibernate 应用程序。 我想覆盖 @Min 注释的 validator 并编写以下代码: @Component public class CustomMinV
我有一个简单的 validator 来验证一个字符串值是预定义列表的一部分: public class CoBoundedStringConstraints implements Constraint
在 ConstraintValidator 中使用依赖注入(inject)时,我遇到了意外的行为。正在类里面进行评估。 实体类: @Entity @ValidDemoEntity public cla
任何人都可以解释一下为什么 ConstraintValidator 类的 isValid() 方法被调用两次吗? 例如,这是我的示例代码: @POST @Path("/json/dog") @Prod
我有一些 UserService 对 User 实体进行操作。我创建了自己的注释和 ConstraintValidator 类作为实现 我需要将该 UserService 注入(inject)到 Co
我正在开发一项增强功能,以创建新的表 A 并将其 id 引用为现有表 B 中的新列 为了简洁起见,我省略了整个实体类。 import javax.validation.constraints.NotN
任何人都可以解释一下为什么 ConstraintValidator 类的 isValid() 方法被调用两次吗? 例如,这是我的示例代码: @POST @Path("/json/dog") @Prod
我需要创建一个自定义注释,当该注释应用于方法时,会根据各种检查检查并验证输入参数(原始和非原始)。如果检查失败应该直接返回错误消息。 在搜索时,我在创建自定义注释时遇到了 AbstractProces
我创建了一个 API 并添加了一个自定义注释来验证请求正文对象,但这从未被调用。下面是对象。请检查一下代码并帮我看看代码哪里需要更正? @NotNull,@Size 也不起作用 请求正文对象 @Get
场景是在持久化一个Log实体类之前,应该检查它的属性String description是否至少包含一个在IllegalWord中找到的词 实体类。下面是两个实体类的映射: // Log.java @
有没有办法从 ConstraintValidator.isValid 方法访问叶或根 bean?如果没有,有什么解决方法吗? 谢谢。 马科斯 最佳答案 不,没有,原因是调用Validator#vali
我是一名优秀的程序员,十分优秀!