SpringBoot使用validation

1.可以做什么

简化接口的参数验证

2.怎么使用

添加依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

方式一:在控制器的普通参数上使用

使用场景:query传参和path传参

1.类上添加注解@Validated

2.方法参数前添加注解@NotEmpty(message = "请选择要删除的记录")

java 复制代码
@RestController
@RequestMapping("/system/sysUser")
@Validated
public class SysUserController {

    @Autowired
    private SysUserService sysUserService;

    @DeleteMapping("/del")
    @FDR
    public Result del(@NotEmpty(message = "请选择要删除的记录") @RequestBody List<String> ids) {
        if (sysUserService.delByIds(ids)){
            return Result.delOk();
        }
        return Result.delFail();
    }

}

添加统一异常处理类

java 复制代码
/**
 * 统一异常处理类
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    public Result handleConstraintViolationException(ConstraintViolationException e) {
        log.error("ConstraintViolationException: ",e);
        return Result.error(e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining("|")));
    }
}

方式二:在控制器的对象参数上使用

使用场景:表单提交

第一步:创建实体类,在实体类的属性上添加校验注解
java 复制代码
@Data
public class SysUser {

    /**
     * 用户名
     */
    @NotBlank(message = "账号不能为空")
    @Size(min = 6, max = 10,message = "账号长度为6-10位")
    private String loginName;
}
第二步:在方法的对象参数前添加注解

添加@Valid注解

java 复制代码
@RestController
@RequestMapping("/system/sysUser")
public class SysUserController {

    @Autowired
    private SysUserService sysUserService;

    @PostMapping("/add")
    public Result add(@Valid @RequestBody SysUser sysUser) {
        if (sysUserService.add(sysUser)){
            return Result.addOk(sysUser);
        }
        return Result.addFial();
    }
}

添加统一异常处理类

java 复制代码
/**
 * 统一异常处理类
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        log.error("MethodArgumentNotValidException: ",e);
        return Result.error(e.getBindingResult().getAllErrors().stream().map(ObjectError::getDefaultMessage).collect(Collectors.joining("|")));
    }
}

方式三:在控制器的对象参数上进行分组使用

使用场景:添加用户时需要输入密码,修改用户时不需要输入密码,这是可以使用分组进行区分

第一步:添加分组接口
java 复制代码
public interface Add {
}
第一步:创建实体类,在实体类的属性上添加校验注解
java 复制代码
@Data
public class SysUser {

    /**
     * 用户名
     */
    @NotBlank(message = "账号不能为空")
    @Size(min = 6, max = 10,message = "账号长度为6-10位")
    private String loginName;

    /**
     * 密码
     */
    @NotBlank(groups = Add.class,message = "密码不能为空")
    @Size(groups = Add.class, min = 6, max = 18,message = "密码长度为6-18位")
    private String password;
}
第二步:在方法的对象参数前添加注解

添加@Valid和@Validated(Add.class)注解

java 复制代码
@RestController
@RequestMapping("/system/sysUser")
public class SysUserController {

    @Autowired
    private SysUserService sysUserService;

    @PostMapping("/add")
    public Result add(@Valid @Validated(Add.class) @RequestBody SysUser sysUser) {
        if (sysUserService.add(sysUser)){
            return Result.addOk(sysUser);
        }
        return Result.addFial();
    }
}
相关推荐
enjoy嚣士5 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
小涛不学习7 小时前
Spring Boot 详解(从入门到原理)
java·spring boot·后端
弹简特10 小时前
【JavaEE18-后端部分】 MyBatis 入门第二篇:使用注解完成增删改查(含有参数传递底层原理)
spring boot·mybatis
于先生吖10 小时前
SpringBoot+Vue 前后端分离短剧漫剧系统开发实战
vue.js·spring boot·后端
小王不爱笑13211 小时前
SpringBoot 自动装配深度解析:从底层原理到自定义 starter 实战(含源码断点调试)
java·spring boot·mybatis
while(1){yan}11 小时前
个人抽奖系统测试报告
spring boot·java-ee·压力测试
asom2212 小时前
DDD(领域驱动设计) 核心概念详解
java·开发语言·数据库·spring boot
Fu-dada12 小时前
Spring Boot 开发接口指南
spring boot
大傻^13 小时前
LangChain4j Spring Boot Starter:自动配置与声明式 Bean 管理
java·人工智能·spring boot·spring·langchain4j
yhole13 小时前
springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38819)
spring boot·后端·spring