关于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业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 
							
								
								    上一篇
								      比较nio大体上优于io的方面要废的节奏啊,好久没写博客了,感觉整个世界都快坍塌了 ok,我们来高逼格的进入nio的学习,别再用什么io了,已经out了 我们先来介绍一下传统的io的缺点: 想起io估计我们所诟病的就是它的速度太慢了,满足不了我们的需求,为什么速度如此之慢,因为它是阻塞性的加上读写磁盘本来就慢,因此导致cpu的使用效率大大降低 这点,我们的Java维护者们,早都看不下去了,于是在jdk1.4后推出了nio来替代io, 新的技术出现往往是用来解决旧技术的痛点的,于是nio极大程度上把传统io的缺点给ko了,nio的优点如下: nio对于文件的读写采用通道+缓存,面向的是缓存,这就很nice了,我们知道缓存本身就是为了提高速度而设计的,所以这就很好的利用了这一点,而且nio是非阻塞式的,采用这种方式后人们诟病的问题速度得到很大的改善。 下面具体介绍 io对于流的读写,只能是要么读流要么写流,二者不能同时进行,这就满足不了人们的需求了,如我要是想既读流又写流那怎么办?这就很让人感觉不爽了,现实中这种用法可以大大提高效率,所以这是一点我们不能容忍io的地方, 于是nio出现了,它带着七彩霞光而来,nio的核... 
- 
							
								
								    下一篇
								      关于安装Oracle——安装流程这次安装Oracle出现了很多错误,在此记下以防再次出错,也记录下我整个的安装流程 1.下载 我下载安装的是企业版 2.安装 解压完安装包运行setuo.exe就可以 首先是安全更新(安全更新我直接点击下一步跳过了) 这一项选择创建和配置数据库 因为只是在单机安装,所以选择了桌面类 本来想使用现有windows用户来着,但是一直提示没有管理员权限,就直接创建了一个新的用户 用户名:oracle 密码:123456 接下来就是确认安装目录,和全局数据库名。注意!这个全局数据库名很重要,涉及到jdbc连接oracle的连接语句 接下来就是正式安装了,安装好后检验是否安装成功。 3.检查安装 刚开始按照书上的流程来操作 ,打开SQL Developer新建连接就出现如下错误 百度了好久说让装旧版本的SQL Developer,装好后成功创建连接 之后发现,只要创建本地连接就可以,根本不需要那么麻烦 登录成功: 用Navicat连接oracle也报好多错误,以下是连接属性 接下来就是关于修改用户名密码, 创建新用户的 为系统在安装Oracle时设定的System s... 
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL数据库在高并发下的优化方案
- MySQL数据库中FOR UPDATE的使用
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 2048小游戏-低调大师作品
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6

 
			 
				 
				 
				 
				 
				 
				 
				



 微信收款码
微信收款码 支付宝收款码
支付宝收款码