Spring MVC 模型验证
模型验证
使用
spring-boot-starter-validation校验参数
导入包
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
从
springboot-2.3开始,校验包被独立成了一个starter组件,所以需要引入validation和web,而springboot-2.3之前的版本只需要引入 web 依赖就可以了。
常用注解
| 注解 | 说明 | 
|---|---|
| @NotNull | 使用在Bean的字段注解中。它是 JSR303(Bean的校验框架)的注解,在controller的方法中验证时(运行时检查一个属性是否为空)使用,如果不合法(为空),注解中的提示信息会保存在result中。 | 
| @Null | 被注释的元素必须为null | 
| @NotNull | 被注释的元素不能为null,可以为空字符串 | 
| @AssertTrue | 被注释的元素必须为true | 
| @AssertFalse | 被注释的元素必须为false | 
| @Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | 
| @Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | 
| @DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 | 
| @DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 | 
| @Size(max,min) | 被注释的元素的大小必须在指定的范围内。 | 
| @Digits(integer,fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 | 
| @Past | 被注释的元素必须是一个过去的日期 | 
| @Future | 被注释的元素必须是一个将来的日期 | 
| @Pattern(value) | 被注释的元素必须符合指定的正则表达式。 | 
| 被注释的元素必须是电子邮件地址 | |
| @Length | 被注释的字符串的大小必须在指定的范围内 | 
| @Range | 被注释的元素必须在合适的范围内 | 
| @NotEmpty | 用在集合类上,不能为null,并且长度必须大于0 | 
| @NotBlank | 只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 | 
配置校验的模型
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
@Data
public class UserDto {
    @Length(min = 6,max = 18,message = "password长度必须位于6到18之间")
    private String password;
    @NotEmpty(message = "请填写手机号")
    private String mobile;
}
在Controller中校验
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 类注解
 */
@RestController
@RequestMapping("test")
public class TestController {
    @RequestMapping(value = "/login",method = RequestMethod.POST)
    public UserDto Test(@Validated UserDto user){
        return u;
    }
}
直接请求会抛出异常
这里我们使用@ControllerAdvice处理全局异常
定义全局模型异常处理类
package com.example.demo.filters;
import java.util.List;
import com.example.demo.R;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = BindException.class)
    public R exceptionHandle(BindException exception) {
        BindingResult result = exception.getBindingResult();
        StringBuilder errorMsg = new StringBuilder();
        List<FieldError> fieldErrors = result.getFieldErrors();
        fieldErrors.forEach(error -> {
            errorMsg.append(error.getDefaultMessage()).append("!");
        });
        return R.Error(errorMsg.toString());
    }
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R MyExceptionHandle(MethodArgumentNotValidException exception) {
        BindingResult result = exception.getBindingResult();
        StringBuilder errorMsg = new StringBuilder();
        List<FieldError> fieldErrors = result.getFieldErrors();
        fieldErrors.forEach(error -> {
            errorMsg.append(error.getDefaultMessage()).append("!");
        });
        return R.Error(errorMsg.toString());
    }
    // 处理运行时异常
    @ExceptionHandler(RuntimeException.class)
    public R doHandleRuntimeException(RuntimeException e) {
        e.printStackTrace();
        return R.Error(e.getMessage());
    }
}
接口统一返回类
package com.example.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class R {
    private int code;
    private String msg;
    private Object data;
    public static R Error(String msg){
        return  new R(1,msg,"");
    }
    public  static R Success(){
        return new R(0,"",null);
    }
    public  static R Success(Object data){
        return new R(0,"",data);
    }
    public  static R Success(Object data,String msg){
        return new R(0,msg,data);
    }
}
引用:
spring-boot-starter-validation 校验参数 - _lemonV - 博客园 (cnblogs.com)

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号