springBoot进行表单校验

一、前言

在进行表单提交时,一般会对参数进行校验,及时返回给用户进行提示,使用户能够正确输入。

二、所需依赖包

这里用的是 SpringBoot 配置项目,本文讲解的重点是后端接口,导入

 
            org.springframework.boot
            spring-boot-starter-validation
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

三、参数校验

一个接口一般对参数(请求数据)都会进行安全校验,参数校验的重要性自然不必多说,那么如何对参数进行校验就有讲究了。

业务层校验

首先我们来看一下最常见的做法,就是在业务层进行参数校验:

public String addUser(User user) {
     if (user == null || user.getId() == null ) {
         return "对象或者对象字段不能为空";
     }
   //.....
     if (!Pattern.matches("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$", user.getEmail())) {
         return "邮箱格式不正确";
     }
     // 参数校验完毕后这里就写上业务逻辑
     return "success";
}

这样做当然是没有什么错的,而且格式排版整齐也一目了然。不过这样太繁琐了,这还没有进行业务操作呢光是一个参数校验就已经这么多行代码,实在不够优雅。

Validator + BindResult 进行校验

Validator 可以非常方便的制定校验规则,并自动帮你完成校验。首先在入参里需要校验的字段加上注解,每个注解对应不同的校验规则,并可制定校验失败后的信息:

package com.hzau.springdemo.model;

import lombok.Data;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 * @ClassName User
 * @Description TODO
 * @Author yueyiming
 * @Date 2020/9/4 11:27
 * @Version 1.0
 * https://blog.csdn.net/hzau_itdog
 **/

@Data
public class User {
    @NotNull(message = "用户id不能为空")
    private Long id;

    @NotBlank(message = "用户账号不能为空")
    @Size(min = 6, max = 11, message = "账号长度必须是6-11个字符")
    private String account;

    @NotBlank(message = "用户密码不能为空")
    @Size(min = 6, max = 11, message = "密码长度必须是6-16个字符")
    private String password;

    @Email(message = "邮箱格式不正确")
    @NotBlank(message = "用户邮箱不能为空")
    private String email;
}

其他注解

@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之间
@NotBlank(message =)   验证字符串非null,且长度必须大于0    很适合String 参数验证
@Email  被注释的元素必须是电子邮箱地址    
@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内    
@NotEmpty   被注释的字符串的必须非空    
@Range(min=,max=,message=)  被注释的元素必须在合适的范围内

 

校验规则和错误提示信息配置完毕后,接下来只需要在接口需要校验的参数上加上  @Validated 注解,

package com.hzau.springdemo.controller;

import com.hzau.springdemo.model.User;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName UserController
 * @Description TODO
 * @Author yueyiming
 * @Date 2020/9/4 11:28
 * @Version 1.0
 * https://blog.csdn.net/hzau_itdog
 **/
@RestController
public class UserController {
    @PostMapping(value = "test")
    public Object test(@Validated User user){

        return user;

    }
}

然后自定义全局异常处理

package com.hzau.springdemo.controller;

import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @ClassName MyControllerAdvice
 * @Description TODO
 * @Author yueyiming
 * @Date 2020/9/4 11:46
 * @Version 1.0
 * https://blog.csdn.net/hzau_itdog
 **/
@RestControllerAdvice
public class MyControllerAdvice {

    @ExceptionHandler(value = BindException.class)
    public String MethodArgumentNotValidExceptionHabdler(BindException exception){
       return exception.getBindingResult().getAllErrors().get(0).getDefaultMessage();
    }
}

进行测试

springBoot进行表单校验_第1张图片

 

你可能感兴趣的:(web开发)