- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
任何人都可以解释一下为什么 ConstraintValidator 类的 isValid() 方法被调用两次吗?
例如,这是我的示例代码:
@POST
@Path("/json/dog")
@Produces("application/json")
@Consumes("application/json")
public Response getDogByJson(@ValidAnimal JsonObject jsonObject) {
return Response.ok("ok").build();
}
@Constraint(validatedBy = {AnimalValidation.class})
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface ValidAnimal {
String message() default "This is not valid !";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
public class AnimalValidation implements ConstraintValidator<ValidAnimal, JsonObject> {
@Override
public void initialize(ValidAnimal constraintAnnotation) {
}
@Override
public boolean isValid(JsonObject jsonObject, ConstraintValidatorContext context) {
System.out.println(">>>>>> : " + jsonObject);
return true;
}
}
当我向此 Web 服务发送请求时,isValid() 方法调用两次。
为什么 ?
注意:我将 OpenLiberty 18.0.0.3 与 JavaEE 8 结合使用
最佳答案
我做了一个快速测试并确认了您注意到的行为。看起来第一次是来自 JAX-RS 运行时调用验证,然后 CDI 运行时也调用验证(因为 JAX-RS 资源也是 CDI bean)。我正在研究如果 OpenLiberty 可以检测到 CDI 功能已启用,我们是否可以使 JAX-RS 避免调用。
当我启用这些功能时,JAX-RS 仅调用 isValid()
一次:
<featureManager>
<feature>jaxrs-2.1</feature>
<feature>jsonp-1.1</feature>
<feature>beanValidation-2.0</feature>
</featureManager>
at com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.callValidationMethod(LibertyJaxRsInvoker.java:371)
但是当我们启用 CDI 功能时,CDI 运行时也会调用 isValid()
:
<featureManager>
<feature>jaxrs-2.1</feature>
<feature>jsonp-1.1</feature>
<feature>beanValidation-2.0</feature>
<feature>cdi-2.0</feature>
</featureManager>
at org.hibernate.validator.cdi.internal.interceptor.ValidationInterceptor.validateMethodInvocation(ValidationInterceptor.java:66)
...
at com.ibm.ws.jaxrs20.server.LibertyJaxRsInvoker.performInvocation(LibertyJaxRsInvoker.java:160)
总而言之,这看起来像是 OpenLiberty 中的一个错误。应进行更新,以便在启用 JAX-RS 和 CDI 功能时仅调用 isValid()
一次。
关于jakarta-ee - ConstraintValidator 两次调用 isValid() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53838390/
我在我的项目中使用 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
我是一名优秀的程序员,十分优秀!