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();
    }
}
相关推荐
字节探索7 小时前
Spring Boot 接口幂等性设计:从唯一索引到 Redis+Lua 的工程实践
java·spring boot
胡写代码7 小时前
删掉的数据还占着唯一键:逻辑删除 + 唯一索引的四次取舍
spring boot·后端
captain37610 小时前
Spring MVC(4)-响应
java·spring boot·后端
CoderYanger14 小时前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
aiks_yuan14 小时前
Spring Boot 4 注入 ObjectMapper 报找不到 Bean:升级 Jackson 3 的改法和过渡方案(4.1.2 实测)
spring boot
猿究院--Cu-Sn合金15 小时前
Spring Boot + DeepSeek 求职 Agent 实践:工具注册、多轮调用与简历 JD 对比
数据库·人工智能·spring boot·后端·deepseek
MetaLite16 小时前
Spring Boot 加了 @Valid,嵌套参数为什么还没校验?
java·spring boot·后端
霸道流氓气质16 小时前
Lingua 语言检测库:n-gram 统计模型、置信度阈值调优与 Spring Boot 分层检测管道的生产级实战
java·spring boot·后端
她的男孩17 小时前
低代码加字段后表结构怎么同步:预览安全 DDL,高风险变更再强制执行
java·spring boot·低代码
huaweichenai17 小时前
spring boot对接kafka实现消息队列处理
spring boot·后端·kafka