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();
    }
}
相关推荐
Flittly1 天前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
Flynt2 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
掉鱼的猫3 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
人活一口气4 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
java小白小7 天前
SpringBoot(01): 初识SpringBoot,从Spring的痛点说起
spring boot
用户3169353811837 天前
如何从零编写一个 Spring Boot Starter
spring boot
程序员晓琪8 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly8 天前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
用户3521802454759 天前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
用户35218024547512 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程