第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析
关于spring中的validate注解后台校验的解析
在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间、成本、质量的博弈中必然会落后。所以把校验层抽象出来是必然的结果,下面说下几种解决方案。
1.简单的校验Demo
依赖:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
Student:
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
public class Student {
@NotNull(message = "名字不能为空")
private String name;
@Size(min = 6, max = 30, message = "地址应该在6-30字符之间")
private String address;
@DecimalMax(value = "100.00", message = "体重有些超标哦")
@DecimalMin(value = "60.00", message = "多吃点饭吧")
private BigDecimal weight;
private String friendName;
@AssertTrue
private Boolean isHaveFriend() {
return friendName != null ? true : false;
}
@Future(message = "生日必须在当前实践之前")
private Date birthday;
@Pattern(regexp = "^(.+)@(.+)$", message = "邮箱的格式不合法")
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public BigDecimal getWeight() {
return weight;
}
public void setWeight(BigDecimal weight) {
this.weight = weight;
}
public String getFriendName() {
return friendName;
}
public void setFriendName(String friendName) {
this.friendName = friendName;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
DemoTest:
import javax.validation.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
public class DemoTest {
public static void main(String[] args) {
Student xiaoming = getBean();
List<String> validate = validate(xiaoming);
validate.forEach(row -> {
System.out.println(row.toString());
});
}
private static Student getBean() {
Student bean = new Student();
bean.setName(null);
bean.setAddress("北京");
bean.setBirthday(new Date());
bean.setFriendName(null);
bean.setWeight(new BigDecimal(30));
bean.setEmail("xiaogangfan163.com");
return bean;
}
private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
public static <T> List<String> validate(T t) {
Validator validator = factory.getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(t);
List<String> messageList = new ArrayList<>();
for (ConstraintViolation<T> constraintViolation : constraintViolations) {
messageList.add(constraintViolation.getMessage());
}
return messageList;
}
}
2.SpringMVC中的应用:
实体类的注解还是和Student类一样,只是controller接值的时候需要做点改动如下:
// 使用@Valid 表明获取到的数据模型需要验证,传入的Errors对象就是验证出错之后的数据对象,包括校验错误的个数,具体的信息等
@RequestMapping(value="/register", method=RequestMethod.POST)
public String registerForm(
@Valid @ModelAttribute Student stu, Errors error){
logger.info("注册新用户");
if ( error.hasErrors()) {
logger.error("出错啦");
}
stuList.add(stu);
logger.info("注册的用户信息:/n" + stu);
return "login";
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
第6章—渲染web视图—使用Apache Tiles视图定义布局
使用Apache Tiles视图定义布局 Tiles是一个免费的开源模板Java应用程序的框架。基于复合模式简化的用户界面的构建。对于复杂的网站仍是最简单、最优雅的方式与任何MVC技术一起工作。Struts2对Tiles提供了支持,如今Tiles发展已有13个年头,成为Apache的一个独立项目,我们可以单独使用Tiles来构建用户界面布局。 Tiles项目:http://tiles.apache.org/index.html Tiles的配置DTD定义:http://tiles.apache.org/framework/tiles-core/dtddoc/index.html 本文主要通过构建一个简单的页面布局来认识Apache Tiles3.x(由于Tiles2.x和Tiles3.x存在较大差异)。 本人的目录结构如下: image 1.准备工作 1.1安装Apache Tiles3.x依赖的Jar <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-e...
-
下一篇
js实现自动分页预加载-原理分析
随着网站的数据越来越多,以及用户访问量的增加。网页数据从最初的一次性加载全部数据到后来的每次点击按一定数量的查询结果返回数据,于是有了分页功能。 随着网络的发展,人们更注重于网站的体验效果,传统网站实现了基本的分页功能,但用户每次都需要手动去点击某一页来实现翻页,这大大影响了网站的体验效果,于是有人提出了自动分页,看到那就加载到哪,既减少了手动操作,又大大提升了网站加载速度,减少了往回翻页的网络延迟以及卡顿。现在很多的网站使用了自动填充分页功能,其中就有当年比较火的QQ空间。 本文就循环渐进地一步步分析讲述一下其中的原理。条件: 当初始化页面数据较少时 当数据较多,出现滚动条,并且滚动到底部时 需要了解的基本点: 内容真实高度(scrollHeight 或 offsetHeight) 可视高度 即浏览器视窗高度(innerHeight 或 clientHeight ) 向上滚动的高度(scrollTop) 隐藏的高度(通过计算得出用于判断是否达到触发分页条件) 图片时临时画的,可能比较丑,大概就是这样的 实现思路: 由于每个人的显示屏高度不一,加载数据也就不在局限于传统的固定加载多少条...
相关文章
文章评论
共有0条评论来说两句吧...