Spring Validation
Spring Validation模块用于表单数据验证配置,示例如下
依赖Jar包
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
Controller方法
/**
* 添加酒店
* @param hotel
* @param bindingResult
* @return
*/
@RequestMapping(value = "/add")
// @Valid注释表示需要验证
public String addHotel(@Valid Hotel hotel,
BindingResult bindingResult,
Model model) {
if (hotel.getName() == null) {
// 显示添加页面
model.addAttribute(HOTEL, new Hotel());
return "hotel/addHotel";
} else {
// 验证失败时回到本页面并显示错误信息
if (bindingResult.hasErrors())
return "hotel/addHotel";
hotelService.addHotel(hotel);
return "redirect:/hotel/list";
}
}
需要验证的bean配置
package com.qunar.bean; import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; public class Hotel { private Integer id; @NotNull(message = "酒店代码不能为空")
@NotEmpty(message = "酒店代码不能为空")
@Pattern(regexp = "\\w+",
message = "酒店代码不能包含特殊字符")
@Length(max = 45, message = "酒店代码最长为45个字符")
private String code; @NotNull(message = "酒店名称不能为空")
@NotEmpty(message = "酒店名称不能为空")
@Pattern(regexp = "([\\u4e00-\\u9fa5]|\\w)+",
message = "酒店名称不能包含特殊字符")
@Length(max = 100, message = "酒店名称最长为100个字符")
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getCode() {
return code;
} public void setCode(String code) {
this.code = code == null ? null : code.trim();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name == null ? null : name.trim();
}
}
页面
<%--
Created by IntelliJ IDEA.
User: zhenwei.liu
Date: 13-7-30
Time: 上午11:50
To change this template use File | Settings | File Templates.
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8" %>
<html>
<head>
<title>添加酒店</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<sf:form action="/hotel/add" method="POST" modelAttribute="hotel">
<table>
<tr>
<td align="right">酒店代码</td>
<td><input type="text" name="code"/></td>
<td><sf:errors path="code" cssClass="error" /> </td>
</tr>
<tr>
<td align="right">酒店名称</td>
<td><input type="text" name="name"/></td>
<td><sf:errors path="name" cssClass="error" /> </td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="添加"/>
<input type="reset" value="重置"/></td>
</tr>
</table>
</sf:form>
</body>
</html>
这样当提交这个这个页面表单时,就会验证hotel的各个属性,如验证不通过则回到本页面并显示错误信息
另外,Spring支持自定义验证注解类,加入自己的验证规则,具体例子可以参考以下
http://outbottle.com/custom-annotated-validation-with-spring-3-web-mvc/
Spring Validation的更多相关文章
- Spring表单验证(Spring Validation)
1.基本介绍 之前在项目中做的后台验证就是Spring Validation,最近闲下来了,就来整理一下. 从Spring3.0开始,Spring MVC中提供了对java校验的API支持.在Spri ...
- 使用spring validation完成数据后端校验
前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验.但是为了避免用户绕过浏览器,使用http工具直接向后端请求 ...
- Spring validation 后端校验【转】
本文来自 下一秒升华 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u013815546/article/details/77248003?utm_source=co ...
- JSR303/JSR-349,hibernate validation,spring validation 之间的关系
JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.co ...
- 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
引入依赖 我们使用maven构建springboot应用来进行demo演示. <dependencies> <dependency> <groupId>org.sp ...
- @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- 使用Spring Validation优雅地校验参数
写得好的没我写得全,写得全的没我写得好 引言 不知道大家平时的业务开发过程中 controller 层的参数校验都是怎么写的?是否也存在下面这样的直接判断? public String add(Use ...
- Spring Validation最佳实践及其实现原理,参数校验没那么简单!
之前也写过一篇关于Spring Validation使用的文章,不过自我感觉还是浮于表面,本次打算彻底搞懂Spring Validation.本文会详细介绍Spring Validation各种场景下 ...
- Spring Validation 表单校验
最近开发一个项目,发现字段校验比较多,同事提出使用Validation校验能更方便一些,今天记录下来,供以后参考: 一.在pom.xml中添加依赖: <dependency> <gr ...
随机推荐
- 【BZOJ】1152: [CTSC2006]歌唱王国Singleland
题解 读错题了,是最后留下一个牛人首长歌颂他,和其他人没有关系,t就相当于数据组数 结论题,具体可看 https://www.zhihu.com/question/59895916/answer/19 ...
- 用 Java 实现一个快速排序算法
快速排序是排序算法中效率最高的一种,它是利用递归的原理,把数组无限制的分成两个部分,直到所有数据都排好序为止. 快速排序是对冒泡排序的一种改进.它的基本思想是通过一趟排序将要排序的数据分 ...
- 使用setsid替代nohup
使用setsid替代nohup 使用 nohup 执行sudo -e时会有问题的.
- 2017-2018-1 20179202《Linux内核原理与分析》第八周作业
一 .可执行程序的装载 1. 预处理.编译.链接 gcc –e –o hello.cpp hello.c //预处理 gcc -x cpp-output -S -o hello.s hello.cpp ...
- Android中selector背景选择器
http://blog.csdn.net/forsta/article/details/26148403 http://blog.csdn.net/wswqiang/article/details/6 ...
- 深入理解SQL的四种连接,左外连接,右外连接,内连接,全连接
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- python opencv3 cornerHarris 角点检测
git:https://github.com/linyi0604/Computer-Vision 角点也是处在一个无论框框往哪边移动 框框内像素值都会变化很大的情况而定下来的点 如果框框水平方向上移动 ...
- s3c2440地址分配
mini2440的地址怎么分配.mini2440处理器的地址怎么分配. S3C2440处理器可以使用的物理地址空间可以达到4GB,其中前1GB的地址为连接外设的地址空间.>1G的地址空间 分配给 ...
- IO编程
1.文件读写 >>>f = open('/Users/michael/test.txt', 'r') >>> f.read() 'Hello, world!' &g ...
- CORS跨域请求[简单请求与复杂请求]
CORS即Cross Origin Resource Sharing(跨来源资源共享),通俗说就是我们所熟知的跨域请求.众所周知,在以前,跨域可以采用代理.JSONP等方式,而在Modern浏览器面前 ...