SpringMVC 使用验证框架 Bean Validation(上)
来源:互联网 发布:大学练字钢笔推荐 知乎 编辑:程序博客网 时间:2024/06/06 20:11
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。 SpringMVC 自身对数据在服务端的校验(Hibernate Validator)有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数据信息 SpringMVC 会把它保存在错误对象中(Errors接口的子类),这些错误信息我们也可以通过 SpringMVC 提供的标签(form:errors)在前端JSP页面上进行展示。或者使用拦截器 after 方法对处理错误信息进行处理后传递给页面(我们使用JSON请求的时候就需要这样做)。
本文来介绍,如何在 SpringMVC 中进行 Validator 的使用。
一、添加POM依赖
<!-- Hibernate Validator --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
二、配置要验证的实体
public class ValidatorTest { // message 直接提供错误信息 @NotNull(message = "username 不能为空") // message 使用 {} 代表错误内容,从 resources 目录下的 ValidationMessages.properties 文件中读取 @Pattern(regexp = "[a-zA-Z0-9_]{5,10}", message = "{user.username.illegal}") private String username; @Size(min = 5, max = 10, message = "{password.length.illegal}") private String password; // 省略 get\set }
ValidationMessages.properties 文件内容:
user.username.illegal=用户名格式不正确password.length.illegal=密码[${validatedValue}]长度必须为{min}到{max}个字符其中${validatedValue} 用来获取预校验属性的值。{min} 和 {max} 用来读取 @Size 注解中对应的属性值。你还可以像 ${max > 1 ? '大于1' : '小于等于1'} 这样使用el表达式。另外我们还可以拿到一个java.util.Formatter类型的formatter变量进行格式化:${formatter.format("%04d", min)}
如果EL表达式不起作用,可以添加如下依赖尝试,如果没有问题请忽略。
<dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> <scope>provided</scope> </dependency>
内置的验证约束注解
内置的验证约束注解如下表所示(摘自hibernate validator reference):
三、Controller 实体验证与视图错误信息的展示
JSP 页面:
错误信息使用 form:errors 展示,这个标签,必须放在 form:form 中使用。
<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>Java验证框架测试</title> </head> <body> <form:form method="post" modelAttribute="testModel" action="${pageContext.request.contextPath }/validator/test3"> <h1><form:errors path="username" /></h1><!-- path的值可以为 * ,表示显示所有错误 --> <h1><form:errors path="password" /></h1> <form:input path="username" /><br/> <form:input path="password" /><br/> <input type="submit" value="提交"/> </form:form> </body></html>
对应的 Controller 的方法:
@Controller@RequestMapping("/validator")public class ValidatorController { /** * 响应到JSP页面 * * @param test * @param result * 这里的BindingResult必须紧挨着@Valid参数的,即必须紧挨着需要校验的参数, * 这就意味着我们有多少个@Valid参数就需要有多少个对应的Errors参数,它们是一一对应的。 * @return * @author SHANHY * @create 2016年4月14日 */ @RequestMapping("/test3") public String test3(@Valid @ModelAttribute("testModel") ValidatorTest test, BindingResult result, Model model){ model.addAttribute("test", test); if(result.hasErrors()) return "validator1"; return "validator2"; }}
后面文章将接着介绍:
四、Controller 普通参数验证与视图错误信息的展示
五、JSON 请求响应错误信息
六、错误信息的配置文件
七、错误信息中使用EL表达式
八、一个手工验证的工具类
2 0
- SpringMVC 使用验证框架 Bean Validation(上)
- SpringMVC 使用验证框架 Bean Validation(下)
- springmvc 使用validation验证!
- 使用SpringMVC数据验证框架validation做数据校验
- SpringMVC验证框架Validation分组验证
- java后端验证 bean validation 框架
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC验证框架Validation特殊用法
- SpringMVC BindingResult验证框架Validation特殊用法
- SpringMVC 集成 Bean Validation
- @Valid springMvc bean Validation
- SpringMVC使用hibrenate validation进行验证
- Bean Validation 注解-约束验证(一)
- springmvc使用校验框架validation校验
- 持续集成篇_09_复制maven项目
- Http协议详解
- 【安全拾遗】cookie保护伞之Httponly
- geohash的简单分享
- 线段树模版—A Simple Problem with Integers
- SpringMVC 使用验证框架 Bean Validation(上)
- Codeforces Round #347 (Div. 2) A - Complicated GCD
- Hadoop之——Could not resolve hostname XX错误解决办法
- android中Spinner修改默认文本框的样式
- Fiddler 教程
- 省
- JSP和Servlet的相互调用
- 携程Android App插件化和动态加载实践
- 面试求职-你们想知道的腾讯面经