当前位置: 首页 > news >正文

如何优雅的使用进行参数校验

在spring里面有一个注解  @Validated

可以在方法的入参里面这样写

//方法
getActivityFlag(@RequestBody @Validated QueryActivityDto queryActivityDto) //参数详情@NotBlank(message = "userId不能为空")private String userId;@NotNull(message = "storeId不能为空")private String storeId;@NotBlank(message = "festivalId不能为空")private String festivalId;

然后进行报错拦截即可,拦截方式有多种

1、直接在切面进行拦截

实现如下方法

private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();/*** @param object object* @param groups groups*/
public static void validateObject(Object object, Class<?>... groups) throws ValidationException {Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);if (constraintViolations.stream().findFirst().isPresent()) {throw new ValidationException(constraintViolations.stream().findFirst().get().getMessage());}
}

2、进行自定义异常处理

ExceptionHandler(VvipException.class)
public ResultMsg handleException(VvipException e) {// 打印错误信息StackTraceElement s = e.getStackTrace()[0];log.error("msg:【{}】,file:【{}】,line:【{}】,method:【{}】", e.getMessage(), s.getFileName(), s.getLineNumber(), s.getMethodName());return ResultMsg.error(e.getErrorCode().getValue(), e.getMessage());
}private static String getParamErrorMsg(BindingResult bind) {String[] str = Objects.requireNonNull(bind.getAllErrors().get(0).getCodes())[1].split("\\.");String message = bind.getAllErrors().get(0).getDefaultMessage();String msg1 = "不能为空";String msg2 = "不能为null";String msg3 = "must not be null";String msg4 = "must not be empty";if (msg1.equals(message)|| msg2.equals(message)|| msg3.equals(message)|| msg4.equals(message)) {message = ArrayUtil.join(ArrayUtil.remove(str, 0), ".") + ":" + message;}return message;
}

3、还有一种就是在参数后面加一个 BindingResult对象(不推荐 耦合度太高)

findMemberByUnionid(@RequestBody @Validated QueryMemberByUnionidDto queryMemberDto, BindingResult result) {if(result.hasErrors()){result.getFieldErrors().forEach((item)->{log.error("参数错误:{}",item.getDefaultMessage());});}
http://www.dtcms.com/a/322381.html

相关文章:

  • Nginx 功能扩展与二次开发实践
  • 黑马SpringAI项目-聊天机器人
  • axios 发请求
  • 束搜索(Beam Search):原理、演进与挑战
  • ubuntu 端口占用 但是找不到进程 与docker 容器镜像相关
  • 【网络与爬虫 52】Scrapyd-k8s集群化爬虫部署:Kubernetes原生分布式爬虫管理平台实战指南
  • 【新启航】飞机起落架外筒深孔型腔的测量方法 - 激光频率梳 3D 轮廓检测
  • 基于遗传优化的智能灌溉系统控制策略matlab仿真
  • python学智能算法(三十六)|SVM-拉格朗日函数求解(中)-软边界
  • docker的开源跨平台替代Vagrant
  • Zread:把 GitHub 仓库“一键变说明书”的体验与实战指南
  • 【超强总结】图像分割模型训练核心:优化器选型与学习率调控策略
  • 【数据结构初阶】--文件归并排序
  • 前端懒加载技术全面解析
  • Spring学习笔记:Spring AOP入门以及基于Spring AOP配置的深入学习与使用
  • Vue3的简单学习
  • docker基础前置
  • day18 - CSS函数
  • ADB(Android Debug Bridge)—— Android调试桥
  • Android MediaMetadataRetriever取视频封面,Kotlin(1)
  • 【Android调用相册、拍照、录像】等功能的封装
  • Milvus 向量数据库基础操作解析
  • 进阶向:Python编写网页爬虫抓取数据
  • vulnhub-Beelzebub靶场通关攻略
  • 【Spring Boot 快速入门】八、登录认证(二)统一拦截
  • Android中RecyclerView基本使用
  • 鸿蒙分布式任务调度深度剖析:跨设备并行计算的最佳实践
  • Java安全-组件安全
  • 哈希与安全
  • Red Hat Enterprise Linux 7.9安装Oracle 11.2.0.4单实例数据库-图文详解