Tag: bean validation

JSR-303 Bean Validation注释多个字段

我刚刚开始测试JSR-303 Beanvalidation,并想知道是否有可能。 我们的app中有一个默认的正则表达式,用于所有String字段。 如果我想使用beanvalidation来应用它,我想我需要在表单对象中注释每个字段。 @Pattern(regexp = REG_EXP) private String aString; @Pattern(regexp = REG_EXP) private String anotherString; 是否可以在一次点击中将@Pattern应用于所有字符串(或某些字段)? 我们在Weblogic 10.3.4上使用Hibernate实现,JSF2.0作为前端。 validation应该独立于视图,因为我可能从Web服务进入。

JSR303复合注释

我创建了一个由@Digits和@Min组成的复合注释 @Digits(integer=12, fraction=0) @Min(value=0) @ReportAsSingleViolation @Documented @Retention(RetentionPolicy.RUNTIME) @Target( { FIELD, METHOD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Constraint(validatedBy={}) public @interface PositiveInt { String message() default “{positive.int.msg}”; Class[] groups() default {}; Class[] payload() default {}; } 我的问题是,我想重用这个注释,我希望在使用PositiveInteger时指定@Digits’整数’值 例 public Demo{ @PositiveInteger(integer=1) private Integer num1; @PositiveInteger(integer=2) private Integer num2; } 其中num1可以是1-9,num2可以是1-99。 这是否可能,如果是这样,我该如何解决这个问题? 目前,我必须提供一个自定义的ConstraintValidator,我将获得@Digits和@Min的validation码 @Documented @Retention(RetentionPolicy.RUNTIME) @Target( { FIELD, ANNOTATION_TYPE, […]

由于@Constraint validatedBy,如何避免层之间的交叉依赖?

在我们的项目中,我们在单独的Maven模块中有Service和DAO层。 服务模块依赖于DAO模块并与其实体一起使用。 问题是我们不能放置自定义jsr 303约束,它使用DAO实体中服务层的一些服务,因为这会创建从DAO层到服务层的后向引用,因为validation器类需要在自定义的validatedBy属性中引用@约束。 有没有办法(使用标准的jsr 303 api)在运行时指定一些自定义约束的validation器类(或以任何其他方式解决我们的问题)? 内置约束具有空validatedBy属性,但我不知道是否有一些api。

junit测试中的spring-data-jpa beanvalidation

在我最近的工作中,我使用了spring-data-jpa来利用提供的存储库。 当涉及到集成测试时,我无法配置(我假设)测试的spring上下文,并且作为结果beanvalidation在我的测试中不起作用。 我知道我可以注入validation器,并对我的注释进行unit testing,但事实并非如此。 我正在编写集成测试,并希望在支持DB的情况下测试存储库。 我准备了简单的项目来显示所有必要的项目文件。 当我运行测试时,2失败了,我不知道为什么,类路径上存在hibernatevalidation器。 Failed tests: insertWrongEmail(com.example.core.data.jpa.UserRepositoryTest): Expected ConstraintViolationException wasn’t thrown. insertToShortPassword(com.example.core.data.jpa.UserRepositoryTest): Expected ConstraintViolationException wasn’t thrown. [..] Apr 23, 2013 5:00:08 PM org.hibernate.validator.internal.util.Version INFO: HV000001: Hibernate Validator 4.3.1.Final 源代码和mvn测试输出如下。 预先感谢您的帮助。 Java类(我删除了注释,geters,seters,equals,hashCode,toString等): BaseEntity package com.example.core.data.jpa; import javax.persistence.*; @MappedSuperclass public abstract class BaseEntity { public static final String SEQUENCE = “global_seq”; @Id @SequenceGenerator(name = […]

使javaxvalidation错误消息更具体

对不起,如果此问题已在某处提及过。 如果有请链接我,我还没有找到一个满意的答案。 我一直在寻找一种方法来让我的javaxvalidation提供的错误消息更具体。 我目前拥有的@Min注释消息在ValidationMessages.properties文件中指定: javax.validation.constraints.Min.message=The value of this variable must be less than {value}. 这打印出来就像预期的那样 The value of this variable must be less than 1 我想要的是消息还包括validation失败的变量(和类)的名称以及失败的变量的值。 更像是。 The value of class.variable was 0 but not must be less than 1 任何帮助将不胜感激。 克利

JSF:JSR 303 Beanvalidation – 为什么在getter而不是setter?

我不明白为什么JSR 303(beanvalidation)是针对getter方法而不是setter的? 将它放在setter方法下是不是更合乎逻辑,因为那是进入字段的入口点,应该在此之前检查validation?

是否有使用带注释的方法参数启用JSR 303 Bean Validation的标准方法

我一直在寻找一段时间而没有运气。 我没有使用Spring MVC,但仍希望使用@javax.validation.Valid来启用方法参数的validation。 举个例子 public class EventServiceImpl implements IEventService { @Override public void invite(@Valid Event event, @Valid User user) { … } } 使用MVC,这为@Controller注释bean启用了一个简单的 (参见5.7.4.3配置一个JSR-303validation器供Spring MVC使用 )。 使用AOP应该是非常简单的。 不过,我怀疑有一些标准的方法可以做到这一点。 因此,问题是:对于非MVC应用程序和非控制器bean,是否存在类似的事情,以便为带注释的bean启用输入validation?

使用JSR-303和Spring的Validator的组合为spring引导端点实现自定义validation逻辑

我正在尝试使用JSR-303 Bean Validation API和Spring’s Validator的组合为Spring引导端点实现一些自定义validation逻辑。 基于Validator类图,似乎可以扩展CustomValidatorBean , SpringValidatorAdapter或LocalValidatorFactoryBean以将一些自定义validation逻辑添加到重写方法validate(Object target, Errors errors) 。 。 但是,如果我创建一个validation器来扩展这三个类中的任何一个并使用@InitBinder注册它validate(Object target, Errors errors)则永远不会调用其validate(Object target, Errors errors)方法,也不会执行validation。 如果我删除@InitBinder那么默认的springvalidation器会执行JSR-303 Bean Validation 。 rest控制器: @RestController public class PersonEndpoint { @InitBinder(“person”) protected void initBinder(WebDataBinder binder) { binder.setValidator(new PersonValidator()); } @RequestMapping(path = “/person”, method = RequestMethod.PUT) public ResponseEntity add(@Valid @RequestBody Person person) { person = personService.save(person); […]

如何在REST Web服务中处理资源validation?

我正在使用Spring,Jersey和Hibernate(JPA)在Java中构建REST Web服务。 现在我正在尝试在我的资源中添加对validation的支持。 JSR-303(Beanvalidation)自然是一个合适的选择(我使用的是Hibernate Validator,它是JSR-303的参考实现)。 但是,我试图首先巩固一些概念。 在我看来,至少有两种可能的validation: 对字段进行常规validation ,例如检查属性是否为空,检查String属性是否是有效的电子邮件,检查Integer属性是否大于10 ,等等。这是按预期工作的。 我已经注册了一个JAX-RS ExceptionMapper,它将javax.validation.ConstraintViolationException映射到正确的HTTP响应中。 数据完整性validation 我将通过“数据完整性validation”的例子来解释我的意思。 当两个或多个资源之间存在关系时会发生这种情况。 想象一下两个资源: Product和Category 。 Product 有一个Category 。 当客户端向服务器发送要创建的Product的表示(POST HTTP请求)时,它必须通知产品的Category 。 当然,客户必须事先知道类别。 用JSON想象一下: { “quantity”: “10”, “state”: “PRODUCED”, “category”: { “id”: “123” } } 那么,id 123的类别可能不存在。 如果我们尝试将其插入数据库,显然我们会得到一个与外键相关的exception。 所以我假设我们必须validation这些问题并向客户端返回正确的消息,就像在常规属性validation中一样。 现在,我的主要问题是: 现在我正在通过JPA与Bean Validation的集成在数据访问级别执行validation。 validation是在序列化处理 之前/之后,数据库操作之前/之后还是两者之间完成的 ? 如何处理数据完整性validation ? 手动? (即明确地咨询数据库检查数据完整性)或者我们应该尝试插入它然后捕获数据库(或DAO)exception? Beanvalidation与此类validation无关,对吧? 如果您对JAX-RS / REST和Beanvalidation有任何经验,如果您让我知道,我将很高兴。 […]

unit testing的良好模式形成了在Spring MVC中具有基于注释的validation的bean

对表单bean使用基于注释的validation时,为了确保为每个字段指定正确的validation注释,对这些bean进行unit testing的最佳做法是什么? 例如,如果您有: public class MyForm { @NotNull private String name; } validation@NotNull是否适用于它的最佳方法是什么? 一个显而易见的方法是创建一个validation器,在它上面抛出一个null并期望它失败。 但在我看来,这不是最好的方法,因为你将使用它来测试@NotNull的行为和实现,而不是信任框架。 理想情况下,我希望使用reflection或实用程序,使我可以断言@NotNull (和任何其他)validation应用于给定字段,而不必发送未通过validation的各种值组合。 是否有一种优雅的方式来做到这一点,或者我是否在正确的轨道上?