热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

SpringBoot@Validated注解实现参数分组校验的方法实例

这篇文章主要给大家介绍了关于SpringBoot@Validated注解实现参数分组校验的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据。

1、首先还是先导包,导入pom文件。


  org.springframework.boot
  spring-boot-starter-validation

2、解释一下注解的作用

@Null 限制只能为null
@NotNull 限制必须不为null
@NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位
数不能超过fraction
@Future 限制必须是一个将来的日期
@Past 验证注解的元素值(日期类型)比当前时间早
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

3、在实体类加上要验证的字段。(我这里随便写下)

注意标注的地方

标注的地方就是用来分组校验的,下下面会解释。

@Data
public class LoginVo {

 @ApiModelProperty(value = "用户名称")
 @NotEmpty(message = "用户名不能为空!",groups = LoginModel.class)
 @NotEmpty(message = "添加时用户名不能为空!",groups = SaveModel.class)
 private String userName;

 @ApiModelProperty(value = "密码")
 @Size(min = 2,message = "密码最少为2位",groups = LoginModel.class)
 @Size(min = 6,message = "密码最少为6位",groups = SaveModel.class)
 private String password;
}

通过groups的属性来分组,假设我在使用登录分组校验的时候,设定用户名不能为空和密码最少为2位的验证。而在添加分组设定添加时用户名不能为空和密码最少为6位的验证。

4、在来解释下上面标注的分组接口。

LoginModel

import javax.validation.groups.Default;
public interface LoginModel extends Default {
}

必须继承默认的Defaut接口不然后抛出异常。

SaveModel

import javax.validation.groups.Default;
public interface SaveModel extends Default{
}

5、在controller的接口上加上@Validated注解,参数就加上你需要根据那种规则来校验。

 @ApiOperation(value = "登录以后返回token")
  @PostMapping(value = "/login")
  public Result login(@RequestBody @Validated(LoginModel.class) LoginVo loginVo) {
    String token = userService.login(loginVo.getUserName(), loginVo.getPassword());
    return Result.success(token);
  }

运行后只能在控制台显示错误的结果,新的问题又来了怎么把错误的结果通过自己的result类返回给前端。这就需要对错误全局捕捉了。

6、写一个对Response换回结果的处理。

@RestControllerAdvice
@Slf4j
public class ParameterCalibration {

  @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
  @ResponseStatus(HttpStatus.OK)
  @ResponseBody
  public Result handleMethodArgumentNotValidException(Exception exception) {
    StringBuilder errorInfo = new StringBuilder();
    BindingResult bindingResult=null;
    if(exception instanceof MethodArgumentNotValidException){
      bindingResult= ((MethodArgumentNotValidException)exception).getBindingResult();
    }
    if(exception instanceof BindException){
      bindingResult= ((BindException)exception).getBindingResult();
    }
    for(int i = 0; i  0){
        errorInfo.append(",");
      }
      FieldError fieldError = bindingResult.getFieldErrors().get(i);
      errorInfo.append(fieldError.getField()).append(" :").append(fieldError.getDefaultMessage());
    }
    log.error(errorInfo.toString());
    //这里返回自己的Result的结果类。
    return Result.validateFailed(errorInfo.toString());
  }

  @ExceptionHandler(Exception.class)
  @ResponseStatus(HttpStatus.BAD_REQUEST)
  @ResponseBody
  public Result handleDefaultException(Exception exception) {
    log.error(exception.toString());
     //这里返回自己的Result的结果类。
    return Result.validateFailed("服务器错误",exception);
  }
}

``

7. 先测试LoginModel的校验规则

控制台打印的数据

前端收到的数据

切换成SaveModel控制台打印的数据

切换成SaveModel前端收到的数据

6

可以看到两次的验证规则时不同的,完成了简易的分组操作。

8 、总结,就是在添加验证规则的时候指定对应的分组,在使用时传入需要的分组。可能理解有误,发现请指导。

总结

到此这篇关于SpringBoot @Validated注解实现参数分组校验的文章就介绍到这了,更多相关SpringBoot @Validated注解实现参数分组校验内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 探讨在构建类似Viber或WhatsApp的聊天应用时,如何有效实现客户端(Web、Android、iOS)与服务器之间的连接。本文将分析使用WebSockets标准及其替代方案的优劣。 ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • 本文由「Vue虚拟实验室」的成员effort撰写,深入探讨了Vue CLI 3.0创建项目后的配置细节,特别是如何通过配置代理解决开发环境中的跨域问题。 ... [详细]
  • 容器与微服务基础:快速入门指南
    探索容器和微服务的基础知识,了解如何通过先进的应用性能管理(APM)工具提升监控效能。加入AppDynamics APM的导览,掌握容器与微服务实施及监控的最佳实践。 ... [详细]
  • CentOS 转向引发争议,联合创始人推出 Rocky Linux
    CentOS 转向 CentOS Stream 引发用户不满,其联合创始人 Gregory Kurtzer 推出新的社区项目 Rocky Linux,旨在延续 CentOS 的精神。 ... [详细]
  • 任务,栈, ... [详细]
  • RegExp 对象在 JavaScript 中用于定义和操作正则表达式,这是一种强大的文本模式匹配工具。通过 RegExp,开发者可以执行复杂的文本搜索和替换操作。 ... [详细]
  • 本文详细介绍了如何在 Mac OS 上设置罗技 M590 鼠标的步骤,包括所需软件及具体操作。 ... [详细]
  • 正则表达式是一种强大的文本匹配工具,但在不当使用时,也可能成为安全漏洞的源头,特别是当它们被恶意利用以触发拒绝服务(DoS)攻击时。本文将深入探讨正则表达式如何成为攻击者的目标,并提供防范策略。 ... [详细]
  • TCP/IP基础知识详解
    本文详细介绍了TCP/IP协议的基本概念,包括网络层次模型、TCP三次握手过程、四次挥手过程以及TCP与UDP的比较。通过这些内容,读者可以更好地理解TCP/IP协议的工作原理。 ... [详细]
  • 本文详细介绍了使用ZooKeeper构建高可用集群的方法,包括必要的软件环境准备、配置文件调整及集群启动等关键步骤。通常,一个ZooKeeper集群由奇数个节点组成,以确保Leader选举的有效性。 ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • Python库在GIS与三维可视化中的应用
    Python库极大地扩展了GIS的能力,使其能够执行复杂的数据科学任务。本文探讨了几个关键的Python库,这些库不仅增强了GIS的核心功能,还推动了地理信息系统向更高层次的应用发展。 ... [详细]
author-avatar
风nds
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有