spring boot validator校验
来源:互联网 发布:淘宝女装快捷短语 编辑:程序博客网 时间:2024/05/22 12:58
(1) 入门例子;
Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。那么在spring boot怎么使用这么强大的校验框架呢。
在这里我们主要是使用注解进行学习。我们先说说我们的需求:
我们有一个demo.html,在页面上有两个元素 姓名输入框,密码输入库,提交按钮。
提交到后台之后,使用Validator进行校验,然后如果存在错误,转发到demo.html,
我们先编写一个实体类接收用户的输入,以及使用Validator注解校验:
package
com.kfit.demo;
import
org.hibernate.validator.constraints.Length;
import
org.hibernate.validator.constraints.NotEmpty;
public
class
Demo {
private
long
id;
@NotEmpty
(message=
"姓名不能为空"
)
private
String name;
@NotEmpty
(message=
"密码不能为空"
)
@Length
(min=
6
,message=
"密码长度不能小于6位"
)
private
String password;
publiclong getId() {
return
id;
}
publicvoid setId(longid) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
@Override
public
String toString() {
return
"Demo [id="
+ id +
", name="
+ name +
", password="
+ password +
"]"
;
}
}
这个实体类在属性上加入了注解@NotEmpty,@Length,那么常用的注解有:
约束注解名称 约束注解说明
@null 验证对象是否为空
@notnull 验证对象是否为非空
@asserttrue 验证 boolean 对象是否为 true
@assertfalse 验证 boolean 对象是否为 false
@min 验证 number 和 string 对象是否大等于指定的值
@max 验证 number 和 string 对象是否小等于指定的值
@decimalmin 验证 number 和 string 对象是否大等于指定的值,小数存在精度
@decimalmax 验证 number 和 string 对象是否小等于指定的值,小数存在精度
@size 验证对象(array,collection,map,string)长度是否在给定的范围之内
@digits 验证 number 和 string 的构成是否合法
@past 验证 date 和 calendar 对象是否在当前时间之前
@future 验证 date 和 calendar 对象是否在当前时间之后
@pattern 验证 string 对象是否符合正则表达式的规则
@Email 验证邮箱
实际例子:
@size
(min=
3
, max=
20
, message=
"用户名长度只能在3-20之间"
)
@size
(min=
6
, max=
20
, message=
"密码长度只能在6-20之间"
)
@pattern
(regexp=
"[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}"
, message=
"邮件格式错误"
)
@Length
(min =
5
, max =
20
, message =
"用户名长度必须位于5到20之间"
)
@Email
(message =
"比如输入正确的邮箱"
)
@NotNull
(message =
"用户名称不能为空"
)
@Max
(value =
100
, message =
"年龄不能大于100岁"
)
@Min
(value=
18
,message=
"必须年满18岁!"
)
@AssertTrue
(message =
"bln4 must is true"
)
@AssertFalse
(message =
"blnf must is falase"
)
@DecimalMax
(value=
"100"
,message=
"decim最大值是100"
)
DecimalMin(value=
"100"
,message=
"decim最小值是100"
)
@NotNull
(message =
"身份证不能为空"
)
@Pattern
(regexp=
"^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$"
, message=
"身份证格式错误"
)
好了,这个不是我们这节的重点,这里简单说一下而已,那么之后我们应该怎么做呢?我们需要编写一个Controller进行访问的时候,能访问到demo.html已经点击提交按钮的处理方法,具体看如下代码:
@RequestMapping
(
"/demo"
)
public
String demo(Model model){
model.addAttribute(
"demo"
,
new
Demo());
return
"/demo"
;
}
@RequestMapping
(
"/demoAdd"
)
public
String demoAdd(
@Valid
Demo demo,BindingResult result,Model model){
//有错误信息.
model.addAttribute(
"demo"
,demo);
if
(result.hasErrors()){
List<ObjectError> list = result.getAllErrors();
for
(ObjectError error:list){
System.out.println(error.getCode()+
"---"
+error.getArguments()+
"---"
+error.getDefaultMessage());
}
return
"demo"
;
}
return
"/demo"
;
}
这里的代码还是需要简单说明下,我们使用@Valid指定要校验的实体类。
BindingResult 所有的错误信息都会保存在这个类中,我们可以使用result.hasErrors() 判断是否有错误信息,有的话,我么转发到我们原先的访问的hello.html,如果没有的话,我们正常应该是调整到list.html之类的,这里只是为了方便测试跳回了demo.html,但是如果没有任何错误信息的话,那么在页面上是不会显示错误信息的。
好了,接下里我们看看demo.html是怎么编写的吧?
<!DOCTYPE html>
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
/>
<
title
>hello spring boot</
title
>
</
head
>
<
body
>
<
form
action
=
"/demoAdd"
method
=
"post"
th:object
=
"${demo}"
>
<
p
>姓名:<
input
type
=
"text"
name
=
"name"
th:value
=
"*{name}"
/>
</
p
>
<
p
th:if
=
"${#fields.hasErrors('name')}"
th:errors
=
"*{name}"
>Name Error</
p
>
<
p
>密码:<
input
type
=
"text"
name
=
"password"
th:value
=
"*{password}"
/>
</
p
>
<
p
th:if
=
"${#fields.hasErrors('password')}"
th:errors
=
"*{password}"
>password Error</
p
>
<
p
><
button
>提交</
button
></
p
>
</
form
>
</
body
>
</
html
>
这里我们使用的thymeleaf进行展示数据的,使用jsp的代码需要用到tag标签,也能实现相同的效果,自行百度学习。这里核心代码就是:
<
p
th:if
=
"${#fields.hasErrors('name')}"
th:errors
=
"*{name}"
>Name Error</
p
>
这句代码一旦后台有返回异常信息的话,就会显示name对应的message,如果满足了两个条件的话,是会返回两个的,之间是用<br/>进行处理的,就如我们的password什么都不填写的情况下是会显示如下信息的:
密码:
密码不能为空
密码长度不能小于6位
(2) 国际化;
在上一节我们就讲过国际化了,那么如何在Validator加入国际化呢,很简单的,只需要在国际化配置文件加入相应的配置如:
demo.name = `name` is not empty.
这里需要注意的地方是:
必须放在classes目录下,而且必须用ValidationMessages这个名字
也就是文件名称需要命令为:
ValidationMessages.properties
ValidationMessages_en.properties
那么修改Demo.java文件:
@NotEmpty(message="{demo.name}")
(3) 在代码中添加错误信息;
有些代码是很难使用Validator的注解来实现的,那么我们怎们在返回的信息添加我们自己的判断呢,比如我们现在要求用户输入的name不能重复,那么势必我们会这么一段代码: 如果存在name,那么返回“该name已经存在了”。其实这个也是很简单,只需要一句话代码就可以添加自定义错误字段的信息了:
result.rejectValue("name", "misFormat", "这个name已经注册过了!");
当然在添加的时候,外层应该有一个if(isExist(“name”))这样的代码,这里没有进行编写,就直接添加了,实际开发请自行从数据库获取,然后进行判断。
- Spring Boot Validator校验
- spring boot validator校验
- 59. Spring Boot Validator校验
- 59. Spring Boot Validator校验
- 59. Spring Boot Validator校验【从零开始学Spring Boot】
- Spring-validator 校验器
- Spring Boot Validator框架
- Spring boot 注解校验
- Spring Boot校验
- 使用Spring的Validator接口进行校验
- spring 3.1 Validator 校验机制解析
- spring 3.1 Validator 校验机制解析
- spring 3.1 Validator 校验机制解析
- spring 3.1 Validator 校验机制解析
- spring mvc 数据校验 -- hibernate-validator
- spring 3.1 Validator 校验机制解析
- spring boot 自定义校验注解
- Spring MVC使用MultiActionController搭配Validator校验表单
- 钢铁是怎样炼成的?一组动态图让你秒懂真正的钢铁是怎样炼成的!
- 全部物理宇宙全部能由数学理解
- 如何用业余时间成为抢手的数据人才?
- Visual Studio 2017 15.4 正式发布,那些你必须知道的新特性!
- Jquery的一些坑和Linux的软连接的使用
- spring boot validator校验
- chmod命令
- eclipse 启动卡死
- LeetCode----- 18.4Sum
- 安卓实现ExpandableList中子项不同的布局
- 集成学习(ensemble Learning)
- JS计时器
- request_firmware(二)
- golang 正则匹配regexp接口实战学习