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();
    }
}
相关推荐
马剑威(威哥爱编程)1 小时前
【AI全栈后端12-08】Spring Boot 用 MCP 统一接入内部系统:让 AI 接一次,全公司复用
java·人工智能·spring boot
顽疲1 小时前
从零用 Java 实现小红书 SpringBoot Vue UniApp(23)笔记话题多对多:一条笔记进多个话题池
java·vue.js·spring boot
做个文艺程序员1 小时前
MQ第02篇:RabbitMQ快速上手教程:AMQP模型详解+Spring Boot整合实战(附完整代码)
spring boot·消息队列·rabbitmq·java-rabbitmq·amqp
RuoyiOffice1 小时前
SpringBoot3 企业定时结算架构:考勤日结、合同到期、库存预警与财务结转如何可靠执行
spring boot·xxl-job·定时任务·分布式任务·spring boot 3·幂等设计·ruoyi office
天空鸟_时光不老2 小时前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
小蒜学长2 小时前
基于SpringBoot+Vue的租房管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·租房管理
洋就在江州2 小时前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
令狐少侠20112 小时前
centos7 下,使用docker 部署IOT 调试平台,ThingsBoard 并完美启动
java·spring boot·iot
省钱兄--zs4 小时前
24小时自助健身房系统软件开发实战:从架构设计到部署全指南
java·数据仓库·spring boot·系统架构·需求分析
IT研究室4 小时前
最新计算机毕业设计选题推荐-基于spring boot的智慧教学资源管理与互动交流平台-网站-文档指导-Java-springboot
java·spring boot·课程设计