Spring框架使用到的JSR303数据校验
发布日期:2021-05-07 22:02:32 浏览次数:16 分类:精选文章

本文共 1774 字,大约阅读时间需要 5 分钟。

JSR303 数据校验 是一套基于 JavaBean 的参数校验标准,广泛应用于前后端开发中。以下将从基础概念到实际应用详细阐述 JSR303 的使用方法。

JSR303 的核心是通过定义校验注解,直接注入到 JavaBean 的属性上,从而实现数据验证的自动化。常用的校验注解包括 @NotNull、@Null、@Digits 等,这些注解能够有效确保数据的合法性。例如,@NotNull 可以防止字段为空,@Digits 则可以验证数字的合法性。Hibernate Validator 是 JSR303 的扩展,提供了诸如 @Email、@Length 等更专业的校验功能。

在实际项目中,首先需要添加相关的 JAR 包。对于普通的 Web 项目,需要下载并拷贝以下 JAR 文件到 WEB-INF/lib 目录:

  • hibernate-validator-4.3.0.Final.jar
  • validation-api-1.0.0.GA.jar
  • jboss-logging.jar

Spring 项目中,需要在配置文件中配置一个 ValidatorFactoryBean。例如,在 spring.xml 中添加:

在 JavaBean 中,通过添加相应的校验注解即可实现数据验证。例如:

@Pattern(regexp="^20[0-1]{1}[0-9]{7}$", message = "学号只能以20开头的十位数字")
public String stuId;
@Pattern(regexp="(^[a-zA-Z0-9]{2,5}$)|(^[\u2E80-\u9FFF]{2,5}$)", message = "用户名可以是2-5位中文或者2-5位英文与数字的组合")
public String name;
@Pattern(regexp="(^[1-9]{2})$|(^[1-9]{1}$)", message = "年龄可以是1位至2位的数字")
public String age;

在 Web 控制器中,需要使用 @Valid 注解来标记需要校验的对象,并通过 BindingResult 接收校验结果。例如:

@ResponseBody
@RequestMapping(value = "/insertStudent", method = RequestMethod.POST)
public Object insertStudent(@Valid Student student, BindingResult res) {
AjaxResult result = new AjaxResult();
Map
map = new HashMap
();
if (res.hasErrors()) {
List
fieldErrors = res.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
System.out.println("错误的字段名: " + fieldError.getField());
System.out.println("错误的信息: " + fieldError.getDefaultMessage());
map.put(fieldError.getField(), fieldError.getDefaultMessage());
}
result.setRes(false);
result.add("errorFields", map);
return result;
} else {
studentService.insertStudent(student);
result.setRes(false);
return result;
}
}
上一篇:Spring中的406错误
下一篇:Jquery中的正则表达式

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月16日 22时56分15秒