大纲:

(1) 入门例子;

(2) 国际化;

(3) 在代码中添加错误信息;

(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 系列博客】

58. Spring Boot国际化(i18n)【从零开始学Spring Boot】

57. Spring 自定义properties升级篇【从零开始学Spring Boot】

56. spring boot中使用@Async实现异步调用【从零开始学Spring Boot】

55. spring boot 服务配置和部署【从零开始学Spring Boot】

54. spring boot日志升级篇—logback【从零开始学Spring Boot】

52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】

51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】

49. spring boot日志升级篇—理论【从零开始学Spring Boot】

48. spring boot单元测试restfull API【从零开始学Spring Boot】

47. Spring Boot发送邮件【从零开始学Spring Boot】

46. Spring Boot中使用AOP统一处理Web请求日志

45. Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】

43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

42. Spring Boot多数据源【从零开始学Spring Boot】

41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

40. springboot + devtools(热部署)【从零开始学Spring Boot】

39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】

39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】

39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】

39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】

38 Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】

37 Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

36 Spring Boot Cache理论篇【从零开始学Spring Boot】

35 Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】

34Spring Boot的启动器Starter详解【从零开始学Spring Boot】

33 Spring Boot 监控和管理生产环境【从零开始学Spring Boot】

32 Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】

31 Spring Boot导入XML配置【从零开始学Spring Boot】

更多查看博客: http://412887952-qq-com.iteye.com/

59. Spring Boot Validator校验【从零开始学Spring Boot】的更多相关文章

  1. 63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] 事情的起源,无意当中在一个群里看到这么一句描述:"有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa&quo ...

  2. 47. Spring Boot发送邮件【从零开始学Spring Boot】

    (提供源代码) Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Bo ...

  3. 20. Spring Boot Servlet【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52069482 Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可 ...

  4. (20)Spring Boot Servlet【从零开始学Spring Boot】

    Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用Spring-Boot时,嵌 ...

  5. 17、Spring Boot普通类调用bean【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...

  6. 21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter) ...

  7. 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】

    [原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...

  8. 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】

    [原创文章,转载请注明出处] 个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析 ...

  9. 77. Spring Boot Use Thymeleaf 3【从零开始学Spring Boot】

    [原创文章,转载请注明出处] Spring Boot默认选择的Thymeleaf是2.0版本的,那么如果我们就想要使用3.0版本或者说指定版本呢,那么怎么操作呢?在这里要说明下 3.0的配置在spri ...

随机推荐

  1. Frequency of String CodeForces - 963D

    http://codeforces.com/contest/963/problem/D 题解:https://www.cnblogs.com/Blue233333/p/8881614.html 记M为 ...

  2. 求N!尾数有多少个0。

    方法一:假设N!=K*10M,K不能被10整除,那么N!尾数就有M个0.再对N!进行质因子分解:N!=2x*3y*5z...由于10=2*5,即每一对2和5相乘都可以得到1个0,所以M只与指数x.z有 ...

  3. [BZOJ2002][Hnoi2010]Bounce弹飞绵羊 LCT

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 建图,每次往后面跳就往目标位置连边,将跳出界的点设为同一个点.对于修改操作发现可以用 ...

  4. Python3 动手自己写谷歌翻译

    本篇为实现谷歌翻译的功能,在编写的时候以为只是一个接口的问题. 没想到的是每次翻译都会触发一次JS的执行,在请求参数中生成一个tk. 文中tk的实现是复用的网上大神的代码生成tk. 好了,不说了直接看 ...

  5. 【数据分析 R语言实战】学习笔记 第一章 数据分析导引

    1.1数据分析概述 1.1.1数据分析的原则 (1)数据分析是为了验证假设的问题,需要提供必要的数据验证.在数据分析中,分析模型构建完成后,需要利用测试数据验证模型的正确性. (2)数据分析是为了挖掘 ...

  6. php的一个魔法常亮__DIR__

    我们知道PHP中提供了一个魔术常量(magic constant)__FILE__,用来指向当前执行的PHP脚本.但PHP没有直接提供该脚本所在目录的常量.也就是说如果我们要得到当前PHP脚本所在的目 ...

  7. 【译】x86程序员手册40-10.5初始化的例子

    10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...

  8. centos7.2密码在单用户下面的修改

    centos7.2在但用户模式下面的修改 1.开机启动 2.grub模式按E健 3.Linux16行的"ro"修改为 "rw init=/sysroot/bin/sh&q ...

  9. Bootstrap modal使用及点击外部不消失的解决方法

    这篇文章主要为大家详细介绍了Bootstrap modal使用及点击外部不消失的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Bootstrap modal使用及点击 ...

  10. ssh设置免秘钥登录

    系统:CentOS7.2 需求:A服务器的fab用户需要使用www用户免秘钥登录到B服务器 换句话说,就是在A服务器的fab用户下,ssh    www@B服务ip   -p  端口  ,然后登录过去 ...