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();
    }
}
相关推荐
星辰徐哥6 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥6 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约7 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee7 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐7 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs7 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐7 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司7 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
一条小锦吕*7 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
Jinkxs7 小时前
Prometheus - 监控微服务:Spring Boot 应用指标暴露与监控
spring boot·微服务·prometheus