SpringBoot之表单验证@Valid

转载自:https://www.cnblogs.com/chenlove/p/8708627.html

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,提交

 

 提交通过。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值