博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第5章—构建Spring Web应用程序—关于spring中的validate注解后台校验的解析
阅读量:6378 次
发布时间:2019-06-23

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

关于spring中的validate注解后台校验的解析

在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节。比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间、成本、质量的博弈中必然会落后。所以把校验层抽象出来是必然的结果,下面说下几种解决方案。

1.简单的校验Demo

依赖:

javax.validation
validation-api
1.1.0.Final

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
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
List
validate(T t) { Validator validator = factory.getValidator(); Set
> constraintViolations = validator.validate(t); List
messageList = new ArrayList<>(); for (ConstraintViolation
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";}

转载地址:http://onxqa.baihongyu.com/

你可能感兴趣的文章
跟我学《JavaScript高程3》第三讲,课程笔记
查看>>
每天进步一点点:(18)NTP服务器搭建
查看>>
svn服务器配置与客户端使用方法
查看>>
中国自主处理器暗流涌动:我们有龙芯、飞腾...
查看>>
nginx502 bad gateway 小结
查看>>
win环境下开启apache的压缩模块
查看>>
手机HTML之touch小记
查看>>
35.Azure创建自动伸缩虚拟机规模集(下)
查看>>
查看PL/SQL编译时的错误信息
查看>>
Extjs Column布局常见问题及解决方法
查看>>
HAProxy+双主Keepalived
查看>>
我的友情链接
查看>>
cobol学习之七逆向输出
查看>>
android软件签名
查看>>
Android 极光推送基本步骤
查看>>
运输问题--运输问题的数学模型
查看>>
this 和super 的用法
查看>>
昨天给网站添加了google +1
查看>>
谷歌阅读器换肤:极喜欢工具栏的设置
查看>>
linux基础:8、文档属性、基础命令介绍(3)
查看>>