SpringBoot之表单验证@Valid

SpringBoot提供了强大的表单验证功能实现,给我们省去了写验证的麻烦;

这里我们给下实例,提交一个有姓名和年龄的表单添加功能,

要求姓名不能为空,年龄必须是不小于18 ;

我们先新建一个Student实体

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

import javax.validation.constraints.Min;

import javax.validation.constraints.NotNull;

@Entity

@Table(name="t_student")

public class Student {

    @Id

    @GeneratedValue

    private Integer id;

    

    @NotEmpty(message="姓名不能为空!")

    @Column(length=50)

    private String name;

    

    @NotNull(message="年龄不能为空!")

    @Min(value=18,message="年龄必须大于18岁!")

    @Column(length=50)

    private Integer 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;

    }

    

}

这里只用了两个注解,下面列下清单,平时可以参考用;

限制 说明
@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 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

dao接口写下:

import org.springframework.data.jpa.repository.JpaRepository;

import com.java1234.entity.Student;

/**

 * 学生Dao接口

 * @author user

 *

 */

public interface StudentDao extends JpaRepository<Student, Integer>{

}

service接口写下:

import com.java1234.entity.Student;

/**

 * 学生Service接口

 * @author user

 *

 */

public interface StudentService {

    /**

     * 添加学生

     */

    public void add(Student student);

}

service接口实现类写下:

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.java1234.dao.StudentDao;

import com.java1234.entity.Student;

import com.java1234.service.StudentService;

/**

 * 学生Service实现类

 * @author user

 *

 */

@Service

public class StudentServiceImpl implements StudentService{

    @Resource

    private StudentDao studentDao;

    @Override

    public void add(Student student) {

        studentDao.save(student);

    }

}

controller写下:

import javax.annotation.Resource;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;

import org.springframework.validation.BindingResult;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.servlet.ModelAndView;

import com.java1234.entity.Student;

import com.java1234.service.StudentService;

/**

 * 学生控制类

 * @author user

 *

 */

@RestController

@RequestMapping("/student")

public class StudentController {

    @Resource

    private StudentService studentService;

    

    /**

     * 添加图书

     * @param book

     * @return

     */

    @ResponseBody

    @PostMapping(value="/add")

    public String add(@Valid Student student,BindingResult bindingResult){

        if(bindingResult.hasErrors()){

            return bindingResult.getFieldError().getDefaultMessage();

        }else{

            studentService.add(student);

            return "添加成功!";

        }

    }

}

add方法里 实体前要加@Valid 假如字段验证不通过,信息绑定到后面定义的BindingResult;

student添加页面studentAdd.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>学生信息添加页面</title>

<script src="jQuery.js"></script>

<script type="text/javascript">

    function submitData(){

        $.post("/student/add",{name:$("#name").val(),age:$("#age").val()},

                function(result){

                    alert(result);

                }

        );

    }

</script>

</head>

<body>

姓名:<input type="text" id="name" name="name"/>

年龄:<input type="text" id="age" name="age"/>

<input type="button" value="提交" onclick="submitData()"/>

</body>

</html>

浏览器请求:http://localhost:8888/studentAdd.html

直接点击提交

输入姓名后,提交

输入年龄5,提交

我们改成20,提交

提交通过。

原文地址:https://www.cnblogs.com/chenlove/p/8708627.html

时间: 2024-10-11 16:22:28

SpringBoot之表单验证@Valid的相关文章

Springboot自带的表单验证操作

在创建Springboot项目中,我们使用了表单验证操作,这一操作将极大地简化我们编程的开发 1.接收数据,以及验证 @PostMapping("/save") public ModelAndView save(@Valid ProductForm productForm, BindingResult bindingResult, Map<String, Object> map) { //1.表单验证 if (bindingResult.hasErrors()) { map

关于springBoot初试tomcat容器认证之表单验证

一.什么是SpringBoot Spring Boot 是所有基于 Spring 开发的项目的起点.Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件.大大减少了程序员在Spring或者SpringMvc中配置所花费的大量时间,不需要在去考虑各种xml文件的配置,简单.快速.方便!使用 Spring Boot 来开发项目只需要非常少的几个配置就可以搭建起来一个 Web 项目,并且利用 IDEA 可以自动生成生成 二.搭建SpringBoot

jquery插件,表单验证validation plugin的使用

笔记: 一.首先引入插件 <script type="text/javascript" src="js/jquery-1.10.0.js" ></script> <script type="text/javascript" src="js/jquery.validate-1.13.1.js" ></script> 列子:一个简单的登录表单验证 1 <form id=&quo

AngularJs 表单验证

看到一些博客说这个框架要过时了,但是还是学习了下,觉的很方便的一个框架,有空的同学可以看看,适合我们入门看,比较基础. 对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $scope 上下文对象上创建一个 model 来表示我们编辑的内容. $scope.model = { id : 8, name: "alice", email: "

表单验证&amp;lt;AngularJs&amp;gt;

经常使用的表单验证指令 1. 必填项验证 某个表单输入是否已填写,仅仅要在输入字段元素上加入HTML5标记required就可以: <input type="text" required />   2. 最小长度 验证表单输入的文本长度是否大于某个最小值,在输入字段上使用指令ng-minleng= "{number}": <input type="text" ng-minlength="5" /> 3.

angularjs中的表单验证

angular对html原生的form做了封装,增加了很多验证功能 1.代码结构 <form name="signup_form" novalidate ng-submit="signupForm()"> <div> <label>用户名</label> <input type="text" placeholder="Name" name="name"

AngularJs的一个简单的表单验证

最近学习了AngularJs框架,觉得确实特别有用.之前学习了一点点的ASP.NET,它的控件也是挺好的,不过还是没有AngularJs轻巧. 定义一个应用程序myApp,一个控制器.接着是表单的验证. AngularJs中,表单控件的HTML元素有:input select button textarea元素 其实还算是很简单的例子. 不过我觉得对比起ASP那种庞大的控件来说,它确实很轻巧. AngularJS 输入验证$dirty 表单有填写记录$valid 字段内容合法的$invalid

angularJS 过滤器 表单验证

过滤器1.filter的作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果,主要用于数据的格式化.2.内置过滤器(1)Currency(货币)将一个数值格式化为货币格式,默认为$(2)Date(3)Filter子串匹配用来处理一个数组,可以过滤出含有某个子串的元素,作为一个字数组来返回.通常用来过滤需要展示的元素.可以是字符串数字,对象或是一个用来从数组中选择元素的函数.字符串:返回所有包含这个字符串的元素对象:将待过滤对象的属性同这个对象中的同名属性进行对比,如果属性值是字符串就

AngularJs 入门系列-2 表单验证

对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $scope 上下文对象上创建一个 model 来表示我们编辑的内容. $scope.model = { id : 8, name: "alice", email: "[email protected]" }; angularjs 的验证需要表单的配合,为了能够访问表单,我们需