问题标签 [bean-validation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3198 浏览

java - jaxb 和 jsr303

我正在使用 jaxb 从配置中构造对象。到目前为止,我为验证编写了自定义函数,但我想进入注释。

例如:

上述方法的异常是描述性的,并为我提供了 xml 中错误的位置。

我想进入这个:

我可以通过读取 afterMarshal 中的注释并根据属性注释运行验证函数来验证这一点,但随后我丢失了发生错误的实际位置(在 xml 中)。

你有什么,我应该为这个问题使用不同的方法/框架吗?

编辑:为了澄清,我必须使用注释方法,因为我需要我正在编写的配置编辑器的属性约束元数据

0 投票
1 回答
8744 浏览

java - 如何检查、抛出和捕获 bean 的验证 ConstraintViolationException

考虑以下情况:

  • 我有一个“服务”模块,它有一个名为ClientService.

  • ClientService使用了一个ClientDao在“dao”模块中调用的类。

  • ClientDao有方法insert(@Valid Client c)。此方法抛出DaoException.

  • 客户是我的实体。他的属性使用 javax bean 验证进行注释,例如@javax.validation.constraints.NotNull.

如果违反了某些约束,则ClientService接收一个ConstraintViolationException. 但ClientService只期望DaoException或任何其他“dao”模块的异常。我想保持这种状态,抛出仅与对象执行的任务直接相关的异常,隐藏更高层的实现细节(在这种情况下,“服务”模块)。

我想做的是封装javax.validation.ConstraintViolationExceptionValidationException我的“dao”模块中,并在trows子句中声明它,与DaoException. 而且我不想自己执行验证检查(这就是我使用@Valid注释的原因)

这是代码(抽象接口,注入和其他一切。为了简单起见)

我想将 dao 类更改为:

但我不知道如何按照我描述的方式做到这一点。

FTR,我在这个项目中使用 Spring Web Flow 和 Hibernate。dao 模块包含@Repository类,service 模块包含@Service类。

0 投票
4 回答
10589 浏览

java - 我需要做哪些设置才能在 Spring 中使用 JSR-303 注释?

我下载了 spring 3 并将其放在我的类路径中,但我无法导入 @Valid 注释。但是,我可以导入其他 spring 3 注释(例如 @Controller)。@Valid 在什么 Jar 和什么包中?

编辑:这是一个 JSR-303 注释。这是什么意思,我如何得到它?

0 投票
1 回答
729 浏览

java - javax.validation 获取字段字段所有者对象

想象一下现在的情况:

我想为此@BiggerThan注释编写一个自定义约束验证器。但是,似乎没有办法Alpha在实现中获取实例ConstraintValidator。isValid 方法的签名是

没有“对象所有者”参数。似乎也没有办法让它通过context

是否有可能在 javax.validator 框架中实现这一点?

我使用 hibernate-validator 作为实现,但我愿意改变它。如果需要,我会考虑与特定 jsr303 实现相关的黑客解决方案。

0 投票
2 回答
1996 浏览

java - JSR303 验证 - 使用来自自定义类验证器的组

我们有一个用例,其中我们有一个结构相当糟糕的 bean,其中包含如下字段:

仅当标志 [1|2] 为真时,我们才需要验证电话/地址/城市/州 [1|2]。糟糕,糟糕的设计,理所当然。

我们当前的策略是在每个“真实”数据字段上使用@NotNull(或我们需要的任何验证),并使用组指示符,如下所示:

在我们验证此 bean 的业务逻辑中(其中包含将由“默认”验证组验证的各种其他字段),我们将违反“默认”组,然后检查 flag1 是否为真,如果因此,对 Info.First.class 运行验证,检查 flag2 是否为真,然后对 Info.Second.class 运行验证。

现在的问题......有没有办法从自定义类验证器中连接到这些组?我设想有一个类验证器,它采用 flag1/flag2 属性及其相应的自定义组,当调用 isValid 时,它会为这些组执行这些二级/三级调用。简单地说,目的是自定义类验证器将位于默认组中,因此验证此类的业务逻辑不会因为必须单独调用验证而将这种丑陋的遗留设计的细节泄漏到其中。

想法?谢谢!

0 投票
1 回答
945 浏览

java - How do I apply AOP advice to a ConstraintValidator in Spring?

I am attempting to write my own Validator (as per the JSR-303 specification) under Spring 3.0.x.

I annotated the isValid(Serializable, CosntraintValidatorContext) method with @Transactional, but it seems that transactional advice is not being applied to this method - when the isValid() method is invoked, a call to sessionFactory.getCurrentSession() creates the Exception:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

I have an @Autowired sessionFactory in the same Validator bean which is injected without issues. My current workaround is to use openSession() instead of getCurrentSession(), but that involves manual transaction management which I would prefer to avoid.

Doing a stack trace in the constructor of my validator bean, it seems that my Validator bean is being constructed via a call to the o.s.b.f.s.AbstractAutowireCapableBeanFactory.createBean(). I assume this means that the factory is capable of populating @Autowired fields in my Validator, but it seems that it is not applying any transactional advice?

Thanks in advance for any help on this matter.

EDIT: If it is of any help, I have included a partial stacktrace (via create new Exception()) that is logged in the constructor:

Transactional configuration appears to be correct (the STS IDE reports that the isValid() method is properly advised by the transactional manager by org.springframework.transaction.interceptor.TransactionInterceptor.invoke (with an @Component annotation on the Validator itself)), but my understanding is that if the validation bean is created outside the normal lifecycle of the Spring container, then the advice will not be properly applied when validation is done during data binding.

0 投票
2 回答
19020 浏览

java - 使 javax 验证错误消息更具体

抱歉,如果这个问题之前已经在某个地方讨论过。如果有请给我链接,我还没有找到满意的答案。

我一直在寻找一种方法来让我的 javax 验证提供的错误消息更具体。

我当前的 @Min 注释消息在 ValidationMessages.properties 文件中指定:

这会按预期打印出来

我想要的是消息还包括验证失败的变量(和类)的名称以及失败的变量的值。所以更像。

任何帮助将不胜感激。

克利

0 投票
1 回答
4224 浏览

java - 如何在 Spring MVC 中使用自定义日期属性编辑器验证日期

我已经在我的 java 类中设置了日期

这是我在控制器中使用的代码

我正在使用 JSR 注释和休眠来验证其他字段。

有什么方法可以使用注释来验证日期必须仅以 dd-mm-yyyy 格式

0 投票
2 回答
474 浏览

java - 如何在休眠验证器中为我的所有属性设置默认约束

我想自动@Valid对我的所有属性施加约束。

例子:

我希望验证器认为所有属性都有@Valid注释。

怎样才能做到这一点?

0 投票
2 回答
156 浏览

java - @Valid 失败时自动返回输入表单

我的控制器中有以下方法:

似乎在很多这些方法中都有一个重复的代码块:

有没有办法避免插入此块并在发生验证错误时自动重定向回 POST 请求的来源?