spring支持两种不同的验证方法:spring验证和JSR-303 bean验证。这两种方法都可以通过定义一个spring验证器来使用,该验证器委托给包括bean验证器在内的其他委托器。到目前为止还不错。
但当对方法进行注释以实际请求验证时,情况就另当别论了。我可以这样批注
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
或者像这样
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
这里,@valid是javax.validation.validated,@validated是org.springframework.validation.annotation.validated。后者的文件说
JSR-303的Valid的变体,支持验证组的规范。专为方便使用spring的JSR-303支持而设计,但不是特定于JSR-303的。
这并没有多大帮助,因为它没有确切地说出它的不同之处。如果有的话。对我来说这两个都挺好的。
更直截了当的回答。对于那些还不知道“验证组”究竟是什么的人来说。
@valid
验证的用法
控制器:
@RequestMapping(value = "createAccount")
public String stepOne(@Valid Account account) {...}
窗体对象:
public class Account {
@NotBlank
private String username;
@Email
@NotBlank
private String email;
}
@validated
验证组的用法
来源:http://blog.codeleak.pl/2014/08/validation-groups-in--MVC.html
控制器:
@RequestMapping(value = "stepOne")
public String stepOne(@Validated(Account.ValidationStepOne.class) Account account) {...}
@RequestMapping(value = "stepTwo")
public String stepTwo(@Validated(Account.ValidationStepTwo.class) Account account) {...}
窗体对象:
public class Account {
@NotBlank(groups = {ValidationStepOne.class})
private String username;
@Email(groups = {ValidationStepOne.class})
@NotBlank(groups = {ValidationStepOne.class})
private String email;
@NotBlank(groups = {ValidationStepTwo.class})
@StrongPassword(groups = {ValidationStepTwo.class})
private String password;
@NotBlank(groups = {ValidationStepTwo.class})
private String confirmedPassword;
}
正如您在文档中引用的,添加了@validated
以支持“验证组”,即验证bean中的字段组。这可以在多步骤表单中使用,您可以在其中验证姓名、电子邮件等。在第一步中,然后在后面的一个或多个步骤中的其他字段。
之所以没有将其添加到@valid
注释中,是因为它是使用Java社区流程(JSR-303)进行标准化的,这需要时间,而且spring开发人员希望允许人们更快地使用该功能。
转到这个jira票证,看看注释是如何产生的。
我在Java8中使用lambdas,我遇到了警告,从lambda表达式引用的。我知道当我在匿名类中使用变量时,它们在外部类中必须是final的,但final和有效的final有什么区别?
问题内容: 我想在python中创建一个高效的循环缓冲区(目标是取缓冲区中整数值的平均值)。 这是使用列表收集值的有效方法吗? 什么会更有效(为什么)? 问题答案: 我会用一个arg 在文档中有一个与您想要的菜谱相似的菜谱。我断言它是最有效的,这完全取决于它是由C语言实现的,这是由一个熟练掌握了一流代码的技术人员组成的。
我已经创建了一个示例SOAP Web服务项目( 我能将应用程序部署到应用服务器,b 当我从一个浏览器访问WSDL使用WSDL你 是否因为对于SOAP请求,我需要在Security Config java文件的顶部包含任何拦截器。还是我在SOAP安全方面走错了路。有人能告诉我我错过了什么,或者给我指出正确的方向吗。令牌验证是WS-Security的一部分吗?或者Okta资源服务器中的身份验证管理器是
问题内容: 我正在尝试使用Spring @Transactional批注,但是在调用 findAll 方法时出现问题,并且出现以下错误: 人DAO: 这是我的: 我尝试删除此行,但是又出现了一个错误,为什么这行不通? 问题答案: 您必须显式声明对事务管理器注释的支持 添加到您的配置中: tx是xmlns:tx =“ http://www.springframework.org/schema/tx”
我需要找到一种算法来解决以下问题: 给出了一个区间列表(leftBound、RightBound),这是在此行为中对区间进行分组的最有效算法: 间隔:(1,4)、(6,9)、(1,3)、(4,8)、(6,9)、(2,7)、(10,15) 需要的解决方案: 组(2,3)包含(1,3), (1,4), (2,7) 组(6,8)包含(4,8), (6,9) 组(10,15)包含(10,15) 当然,有不
我知道这在这个论坛上不是新问题,但我很困惑我该怎么做。 问题:我正在用spring mvc+Hibernate开发一个应用程序。对于服务器端验证,我在controller中使用@valid注释,在bean中使用@null和@notnull注释。 例如: 这个验证很好地进行,数据也保存在DB中。 但我想验证唯一约束,引用完整性和其他约束使用注释没有任何验证器类。 有可能吗?如果没有,那么什么是最好和