spring boot validation校验

版权声明:杨杨杨~~的版权 https://blog.csdn.net/weixin_38316697/article/details/84959997

spring boot validation校验

大部分校验数据一般都是在前端校验,个人认为后台校验的多处场景应该在安全上,防止post进入。

spring boot validation校验主要有四步。

一、添加依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>

二、在实体类中添加验证注解(需要验证的字段)

列子:

    /** 登录名称 */
    @Excel(name = "登录名称")
    private String loginName;

    /** 用户名称 */
    @Excel(name = "姓名")
    @NotBlank(message = "姓名不能为空")
    private String userName;

    /** 用户邮箱 */
    private String email;

    /** 手机号码 */
    @NotBlank(message = "手机号码不能为空")
    @Excel(name = "手机号码")
    private String phonenumber;

验证注解也可以用自定义注解。

这里附上部分标签含义

限制 说明
@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格式

三、在Controller层,在对应校验数据的接口参数部分添加@Valid注解

列子:

    @PostMapping("/add")
    @Transactional(rollbackFor = Exception.class)
    @ResponseBody
    public AjaxResult addSave(@Valid SysUser user) throws ParseException {
            ...
        return toAjax(userService.insertUser(user));
    }

四、统一异常处理(@ControllerAdvice必加,初始化使用)

列子:

@ControllerAdvice
public class BadRequestExceptionHandler extends ResponseEntityExceptionHandler {

    private static final Logger log = LoggerFactory.getLogger(BadRequestExceptionHandler.class);

    protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {

        Map<String, String> messages = new HashMap<String, String>();
        BindingResult result = ex.getBindingResult();
        if (result.hasErrors()) {
            List<ObjectError> errors = result.getAllErrors();
            for (ObjectError error : errors) {
                FieldError fieldError = (FieldError) error;
                messages.put(fieldError.getField(), fieldError.getDefaultMessage());
            }
            log.error(messages.toString());
        }
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messages);
    }
}

效果:

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/84959997