6. SpringBoot服务端数据校验

  1. 编写Controller
package com.synda.controller;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.synda.entity.Users;
@Controller
public class UsersController {
	/**
	 * 此处在跳转访问时候会报错,解决的方法一:
	 * 在addUser方法中注入Users对象;(参数的变量名必须是对象的名称首字母小写)
	 * 二:传递的对象更改名称可以使用@ModelAttribute来实现,此时页面的获取该对象的key也需要修改
	 * @return
	 */
	@RequestMapping("/addUser")
	public String showPage(@ModelAttribute("user") Users users) {
		
		return "add";
	}
	/**
	 * 完成用户添加
	 */
	@RequestMapping("/save")
	public String doSave*(@ModelAttribute("user")* @Valid Users users,BindingResult result) {
		System.out.println(users);
		//hasErrors()方法返回布尔值,如果返回true,则表示验证不通过,存在不合法的数据
		if (result.hasErrors()) {
			
			return "add";
		}
		return "scusses";
	}
}

  1. 页面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form th:action="@{/save}" method="post">
		用户姓名:<input type="text" name="name"> <font color="red" th:errors="${user.name}"></font>
		用户密码:<input type="password" name="password"> <font color="red" th:errors="${user.password}"></font>
		用户年龄:<input type="text" name="age"> 
		<input type="submit" value="ok">
	</form>
</body>
</html>
  1. 实体类
package com.synda.entity;

import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;

import org.hibernate.validator.constraints.Length;

public class Users {
	//判断字符串是否为null(去掉首位空格)@NotEmpty(判断字符串是否为空,但不会去空格)
	
	@NotBlank(message="用户名不能为空")
	private String name;
	@NotBlank(message="密码不能为空")
	@Length(min=2,max=6,message="当前字符串最小为2位,最大为6位")//当前字符串最小为2位,最大为6位
	
	private String password;
	@Email(message="判断邮箱是否合法")
	@Min(value=15,message="判断数值最小值,对应还有max")
	private Integer age;
	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;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Users [name=" + name + ", password=" + password + ", age=" + age + "]";
	}

}

  1. 需要注意的是此时的users参数名一定要对应可能会报错
    在这里插入图片描述

  2. 常见的校验注解;

空检查

@Null 验证对象是否为null

@NotNull 验证对象是否不为null, 无法查检长度为0的字符串

@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.

@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查

@AssertTrue 验证 Boolean 对象是否为 true

@AssertFalse 验证 Boolean 对象是否为 false

长度检查

@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内

@Length(min=, max=)
验证字符串的长度是否在给定的范围之内,包含两端

日期检查

@Past 验证 Date 和 Calendar 对象是否在当前时间之前

@Future 验证 Date 和 Calendar 对象是否在当前时间之后

@Pattern 验证 String 对象是否符合正则表达式的规则

数值检查:建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null

@Min 验证 Number 和 String 对象是否大等于指定的值

@Max 验证 Number 和 String 对象是否小等于指定的值

@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度

@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度

@Digits 验证 Number 和 String 的构成是否合法

@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.

@Range(min=10000,max=50000,message=“range.bean.wage”)
private BigDecimal wage;

@Valid递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)

@CreditCardNumber信用卡验证

@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。

@ScriptAssert(lang= ,script=, alias=)

@URL(protocol=,host=, port=,regexp=, flags=)
6. 新的补充
在使用校验时,实体类中添加了注解,一定要在controller中添加对应的@Valid 注解,并且,使用BindingResult 这个对象,它会将所有的验证错误信息放到这个类中,方便我们处理,如:
在这里插入图片描述
此时,我们单独写一个方法来处理错误信息

 /**
     * 获取验证的错误信息
     * @param result
     * @return
     */
    private Map<String ,String> getErrors(BindingResult result){
        Map<String ,String> errorMap = new HashMap<String ,String>();
        //得到错误信息的list
        List<FieldError> fieldErrors =  result.getFieldErrors();
        for (FieldError error : fieldErrors){
            String errorFiled = error.getField();//发生错误验证的属性
            String errorMessage = error.getDefaultMessage();//验证信息
            errorMap.put(errorFiled,errorMessage);
        }
        return errorMap;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

synda@hzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值