Tag: bean validation

javax.validation.ValidationException:无法找到默认提供程序

我向托管bean添加了一些validation( @NotNull ),突然出现了这个错误。 什么可能导致它的想法? 该应用程序在Apache Tomcat 7中运行。 javax.validation.ValidationException: Unable to find a default provider javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264) javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) javax.faces.validator.BeanValidator.validate(BeanValidator.java:271) javax.faces.component.UIInput.validateValue(UIInput.java:1127) javax.faces.component.UIInput.validate(UIInput.java:941) javax.faces.component.UIInput.executeValidate(UIInput.java:1189) javax.faces.component.UIInput.processValidators(UIInput.java:691) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) javax.faces.component.UIForm.processValidators(UIForm.java:243) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)

如何获取ConstraintValidatorContext?

我正在编写显式调用Bean Validation(JSR-303)的代码,如下所示: public class Example { @DecimalMin(value = “0”) private static final String ANNOTATED = “”; public void isPossitiveNumber(String str){ ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); ConstraintValidator validator = factory.getConstraintValidatorFactory().getInstance( DecimalMinValidatorForString.class); validator.initialize( ReflectionUtils.findField(getClass(), “ANNOTATED”) .getAnnotation( DecimalMin.class)); boolean isValid = validator.isValid(str, null); return isValid; } } 注意行boolean isValid = validator.isValid(str,null); 我为ConstraintValidatorContext传递null ,因为我找不到获取/构造它的方法。 在这种特殊情况下,这个很好,因为内部没有使用ConstraintValidatorContext ,但很明显是一个hack。 我该如何获得ConstraintValidatorContext ? 添加 我被要求提供用例。 […]

Resteasy Beanvalidation未被调用

问题背景 我有一个Resteasy服务,通过Resteasy的SpringContextLoaderListener使用Spring。 这是基于Resteasy版本3.0-beta-6 。 我想对传入的请求使用beanvalidation,但我无法让Resteasy调用validation器。 它的行为就像没有配置validation一样,只是将方法传递给无效的输入对象。 题 如何在Resteasy中启用beanvalidation? 我试过的 我做了以下事情: 用@ValidateRequest注释我的资源类 使用@Valid注释方法参数 注释我的输入类的约束。 添加了对resteasy-hibernatevalidator-provider的依赖 资源: @Named @Path(“users”) @ValidateRequest public class UserResource { /** * * @param user * * curl -x POST http://localhost:7016/api/1.0/users * */ @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) public Response createUser(@Valid User user) { //User creation logic here. } } 用户POJO: @JsonPropertyOrder({ “user_id”, “user_name”, “email” […]

它如何在JSF2中使用beanvalidation消息和i18n?

我创建了validation消息(ValidationMessages.properties)文件,以便在我的项目中实现i18n。 看起来像: pwtNumber.error=PWT Number error.. 我在faces-config.xml中定义它: com.mycompany.web.i18n.ValidationMessages 在我的代码中,我以这种方式使用它: @Null(message = “{pwtNumber.error}”) public String getPwtNummer() { return pwtNummer; } 但问题是我没有收到错误消息,而是来自属性文件的密钥。 这是我得到的错误消息: myForm:pwtNummer: {pwtNumber.error} 我怎么解决呢?

Hibernate Validator方法或构造函数validation

如何使用Hibernatevalidation器validation构造函数或方法中的参数? 我希望validation在ValueObject创建之前发生,这样我就可以抛出exception而不创建对象,除非所有参数都有效。 基本上我正在尝试使用注释,而不是像这样做,如果可能的话: public class ConditionalPerson { private String name; private String surname; private int age; public ConditionalPerson(String name, String surname, int age){ if (name == null || surname == null || age < 1) { throw new IllegalArgumentException(); } this.name = name; this.surname = surname; this.age = age; } } 我已经尝试过像这样的文档似乎可以工作,但仍然会导致创建对象。 public class Person […]

如何使用@DecimalMin和@DecimalMaxvalidationList ?

在我的Spring项目中,我有一个POJO类,它具有CMYK颜色的属性。 我希望这个属性由一个JSON数组表示,该数组恰好有4个浮点数。 每个数字必须介于0.0和1.0之间。 目前我正在努力validation这个属性。 我已经研究过,发现@DecimalMin和@DecimalMax注释不能用于Float或float (请参阅这个问题的答案)。 因此我已经放弃了List List而是使用List 。 这是我剥离的POJO课程: public class Settings { @NotNull @Size(min = 4, max = 4) @DecimalMin(“0”) @DecimalMax(“1”) private List cmykColor; public List getCmykColor() { return cmykColor; } public void setCmykColor(List cmykColor) { this.cmykColor = cmykColor; } } 这里是JUnit测试: @RunWith(SpringRunner.class) @SpringBootTest public class SettingsTest extends Assert { @Autowired private ObjectMapper […]

Jersey / JAX-RS资源方法输入beanvalidation

我通过DropWizard 0.7.1使用Jersey / JAX-RS来公开RESTful服务端点。 我的所有实体POJO都注释了JAX-RS和Hibernate / JSR-303 beanvalidation注释,如下所示: public class Widget { @JsonProperty(“fizz”) @NotNull @NotEmpty private String fizz; // Can’t be empty or null @JsonProperty(“buzz”) @Min(value=5L) private Long buzz; // Can’t be less than 5 // etc. } 当资源方法接收这些POJO中的一个作为输入时(在引擎盖下,DropWizard已经将HTTP实体JSON反序列化为Widget实例),我想根据Hibernate / Bean Validation注释validation它: @POST Response saveWidget(@PathParam(“widget”) Widget widget) { // Does DropWizard or Jersey have something […]

Beanvalidation引发ConstraintViolationException时自定义JAX-RS响应

Bean Validation是validation对象的一个​​很好的选择,但是当抛出ConstraintViolationException时如何自定义REST API的响应(使用RESTeasy)? 例如: @POST @Path(“company”) @Consumes(“application/json”) public void saveCompany(@Valid Company company) { … } 包含无效数据的请求将返回具有以下正文的HTTP 400状态代码: [PARAMETER] [saveCompany.arg0.name] [{company.name.size}] [a] 这很好,但还不够,我想在JSON文档中规范化这类错误。 我该如何自定义此行为?

如何手动触发弹簧validation?

当从json请求体创建时,POJO字段上的带注释的弹簧validation起作用。 但是,当我手动创建相同的对象(使用setter)并想要触发validation时,我不知道该怎么做。 这是Registration类,它具有可以构建对象的Builder内部类。 在构建方法中,我想触发弹簧validation。 请滚动到底部并检查Builder.build()和Builder.valiate()方法以查看当前实现。 我正在使用javax.validation.Validator来触发validation,但我更愿意在可能的情况下利用springvalidation。 package com.projcore.dao; import com.projcore.util.ToString; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.validation.ConstraintViolation; import javax.validation.Valid; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.constraints.Size; import java.util.List; import java.util.Set; /** * The data transfer object that contains the information of a Registration * and validation rules for attributes. */ @JsonIgnoreProperties(ignoreUnknown = true) […]

与Bean Validation API结合使用时,Hibernate不遵循JPA规范吗?

这个问题是对此问题的跟进: JPA ConstraintViolation vs Rollback 我做了一些关于JPA和validationAPI(JSR-303)组合的测试。 我在JPA规范中找到了以下内容(第101-102页): 默认情况下,默认Beanvalidation组(组默认值)将根据预先持久化和更新前的生命周期validation事件进行validation … 如果validate方法返回的ConstraintViolation对象集不为空,则持久性提供程序必须抛出包含对返回的ConstraintViolation对象集的引用的javax.validation.ConstraintViolationException,并且必须将事务标记为回滚。 我设置了以下测试: HibernateValidator作为JSR-303实现 2 PersistenceProvider Hibernate和EclipseLink 一个实体NameNotNullWithDefaultGeneratedStrategy ,其id使用默认策略( @Generated )和@NotNull String name列生成 另一个实体NameNotNullWithTableGeneratedStrategy其中包含使用表策略( @TableGenerated )和@NotNull String name列生成的id 测试尝试使用空name persist每个实体的一个实例。 预期的结果是由persist方法抛出的javax.validation.ConstraintViolationException和rollback only标记为rollback only的事务(即这些假设基于本文中引用的JPA规范)。 结果是: 使用eclipse链接作为提供者: persist方法为两个实体抛出javax.validation.ConstraintViolationException 。 rollback only在两种情况下,事务都标记为rollback only 以hibernate作为提供者: persist抛出javax.validation.ConstraintViolationException用于实体NameNotNullWithDefaultGeneratedStrategy +事务标记为rollback only NameNotNullWithTableGeneratedStrategy 不会为实体NameNotNullWithTableGeneratedStrategy +事务抛出任何exception而不会标记为rollback only 用于NameNotNullWithTableGeneratedStrategy commit因NameNotNullWithTableGeneratedStrategy失败 问题是: 它真的违反了JPA规范吗? 或者我错过了表格生成策略的特殊情况? 如果是违规行为:是否有任何与之相关的错误报告? 这是我测试的代码: package com.example.jpa.validator; […]