springboot-web进阶(一)——表单验证
一、概述
1.准备
先把快速入门篇的结构调整一下,按照自己的喜好或者要求调整:
  
2.需求
基于快速入门篇增加一个女生的需求,禁止添加未成年(18岁以下)
3.实现
第一步:在bean的属性上加对应约束注解
@Size(min = 3, max = 8, message = "名称长度不合法!")
private String name;
@Min(value = 18, message = "未成年禁止入内!")
private Integer age;
package com.example.demo.bean; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Min;
import javax.validation.constraints.Size; /**
* girl的bean
*
* @author zcc ON 2018/2/9
**/
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;
@Size(min = 3, max = 8, message = "名称长度不合法!")
private String name;
@Min(value = 18, message = "未成年禁止入内!")
private Integer age; public Girl() {
} public Girl(String name, Integer age) {
this.name = name;
this.age = age;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
Girl
第二步:在需要校验的参数前加@Valid注解
@PostMapping(value = "/girls")
public Girl addGirl(@Valid Girl girl) {
// 直接返回这个实体类也可以
return girlRepository.save(girl);
}
第三步:根据错误信息错误参数校验逻辑
@PostMapping(value = "/girls")
public Girl addGirl(@Valid Girl girl, BindingResult bindingResult) {
// 表单验证逻辑
if (bindingResult.hasErrors()) {
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError fieldError : fieldErrors) {
log.error("错误字段为:{},错误信息为:{}", fieldError.getField(), fieldError.getDefaultMessage());
}
// 发生错误,直接return
return null;
}
// 直接返回这个实体类也可以
return girlRepository.save(girl);
}
测试:
    
常用约束:
| @Null | 限制只能为null | 
| @NotNull | 限制必须不为null | 
| @AssertFalse | 限制必须为false | 
| @AssertTrue | 限制必须为true | 
| @DecimalMax(value) | 限制必须为一个不大于指定值的数字 | 
| @DecimalMin(value) | 限制必须为一个不小于指定值的数字 | 
| @Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction | 
| @Future | 限制必须是一个将来的日期 | 
| @Max(value) | 限制必须为一个不大于指定值的数字 | 
| @Min(value) | 限制必须为一个不小于指定值的数字 | 
| @Past | 限制必须是一个过去的日期 | 
| @Pattern(value) | 限制必须符合指定的正则表达式 | 
| @Size(max,min) | 限制字符长度必须在min到max之间 | 
| @Past | 验证注解的元素值(日期类型)比当前时间早 | 
| @NotEmpty | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) | 
| @NotBlank | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 | 
| 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 | 
完整约束,请参考hibernate官方文档Bean Validation constraints
springboot-web进阶(一)——表单验证的更多相关文章
- web form  服务器控件表单验证
		<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ValidationDemo ... 
- jQuery学习之:Validation表单验证插件
		http://polaris.blog.51cto.com/1146394/258781/ 最近由于公司决定使用AJAX + Struts2来重构项目,让我仔细研究一下这两个,然后集中给同事讲讲,让每 ... 
- ASP.NET 表单验证实现浅析
		首先,自然是配置 Web.config,在 <system.web> 下设定: <authentication mode="Forms"> <form ... 
- spring boot学习(7) SpringBoot 之表单验证
		第一节:SpringBoot 之表单验证@Valid 是spring-data-jpa的功能: 下面是添加学生的信息例子,要求姓名不能为空,年龄大于18岁. 贴下代码吧: Student实体: ... 
- SpringBoot之表单验证@Valid
		转自:https://www.cnblogs.com/chenlove/p/8708627.html SpringBoot提供了强大的表单验证功能实现,给我们省去了写验证的麻烦: 这里我们给下实例,提 ... 
- 再说表单验证,在Web Api中使用ModelState进行接口参数验证
		写在前面 上篇文章中说到了表单验证的问题,然后尝试了一下用扩展方法实现链式编程,评论区大家讨论的非常激烈也推荐了一些很强大的验证插件.其中一位园友提到了说可以使用MVC的ModelState,因为之前 ... 
- HTML5 web Form表单验证实例
		HTML5 web Form 的开发实例! index.html <!DOCTYPE html> <html> <head> <meta charset=&q ... 
- Web开发-表单验证
		表单验证是Web开发中必不可少的一个环节,用来限制用户输入数据的规范和一致性.那么如何能够简化这一任务,让开发人员通过简单的属性设置就能达到目的呢? FineUI在这一点上也是下足了功夫,比Asp.N ... 
- Day17  表单验证、滚动菜单、WEB框架
		一.表单验证的两种实现方式 1.DOM绑定 <!DOCTYPE html> <html lang="en"> <head> <meta c ... 
- 配置web.xml和glassfish容器实现javaEE表单验证
		web.xml配置: <!-- 声明用于安全约束的角色 --> <security-role> <role-name>ReimUser</role-name& ... 
随机推荐
- Java 8方法引用使用指南
			[编者按]本文作者为拥有15年 Java 开发经验的资深程序员 Per-Åke Minborg,主要介绍如何灵活地解析 Java 中的方法引用.文章系国内 ITOM 管理平台 OneAPM 编译呈现. ... 
- Oracle EBS 多节点停应用
			adstpall.sh -mode=allnodes app/apps 
- 探究MySQL MGR的读写分离
			1:现有环境 机器 MySQL 环境 172.16.128.240 MGR NODE1 MGR 172.16.128.241 MGR NODE2 MGR 172.16.128.242 MGR NODE ... 
- Linux tree命令详解
			tree: 查看目录结构 tree常见命令参数 usage: tree [-adfghilnpqrstuvxACDFNS] [-H baseHREF] [-T title ] [-L level [- ... 
- Ajax请求:本地跨域的问题
			问题出现一: 1.Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-e ... 
- 使用FASTJSON做反序列化的时间格式处理
			JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.mmm"; Productorder tmp1 = JSONObj ... 
- mysql workbench的PK,NN,UQ,BIN,UN,ZF,AI
			mysql workbench建表时PK.NN.UQ.BIN.UN.ZF.AI的意思,后面几个老搞不清,随记在这便于以后方便查. [intrinsic column flags] (基本字段类型标识) ... 
- eoLinker-AMS接口管理系统
			多端阅读<eoLinker-AMS接口管理系统>: 在PC/MAC上查看:下载w3cschool客户端,进入客户端后通过搜索当前教程手册的名称并下载,就可以查看当前离线教程文档.下载eoL ... 
- 【转】基于easyui开发Web版Activiti流程定制器详解(一)——目录结构
			题外话(可略过): 前一段时间(要是没记错的话应该是3个月以前)发布了一个更新版本,很多人说没有文档看着比较困难,所以打算拿点时间出来详细给大家讲解一下,由于本人平时要工作还要陪老婆和孩子而且还经营着 ... 
- JDBC使用
			在工作中碰到要向另一个数据库进行操作的需求,例如数据源为mysql的工程某个方法内需要向oracle数据库进行某些查询操作 接口类 package com.y.erp.pur.util; import ... 
