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

如何优雅的实现无侵入性参数校验之spring-boot-starter-validation

在开发过程中,参数校验是一个非常重要的环节。但是,传统的参数校验方法往往需要在代码中手动添加大量的 if-else 语句,这不仅繁琐,而且容易出错。为了解决这个问题,我们可以使用无侵入性参数校验的方式来简化代码并提高开发效率。

而在 Spring Boot 中,我们可以使用 spring-boot-starter-validation 来实现无侵入性参数校验。这个 Starter 可以帮助我们自动完成参数校验,而不需要手动添加大量的代码。

使用 spring-boot-starter-validation 的方式非常简单。首先,在 pom.xml 中添加如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

然后,在需要校验参数的方法中添加 @Validated 注解,并在需要校验的参数前添加 @NotBlank、@NotNull、@Min、@Max 等注解即可。例如:

@PostMapping("/user")
public User createUser(@Validated @RequestBody User user) {return userService.createUser(user);
}

在上面的代码中,@Validated 注解表示需要进行参数校验,@RequestBody 注解表示接收的是一个 JSON 对象,而 User 类中的 @NotBlank、@NotNull 等注解表示对 User 对象中的相应属性进行校验。
例如:

public class User {@NotBlank(message = "用户名不能为空")private String username;@NotBlank(message = "密码不能为空")private String password;
}

需要注意的是,如果参数校验不通过,会抛出 MethodArgumentNotValidException 异常。我们可以通过添加一个全局异常处理器来处理这个异常。例如:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {BindingResult bindingResult = e.getBindingResult();List<ObjectError> allErrors = bindingResult.getAllErrors();List<String> errorList = allErrors.stream().map(ObjectError::getDefaultMessage).collect(Collectors.toList());return ResponseEntity.badRequest().body(errorList.toString());}
}

在上面的代码中,我们定义了一个 GlobalExceptionHandler 类,并使用 @ControllerAdvice 注解表示这是一个全局异常处理器。当出现 MethodArgumentNotValidException 异常时,会调用 handleMethodArgumentNotValidException 方法来处理异常,并将校验失败的错误信息返回给客户端。

总之,使用 spring-boot-starter-validation 可以帮助我们实现无侵入性参数校验,从而简化代码并提高开发效率。希望本文能对大家有所帮助!

http://www.lryc.cn/news/164923.html

相关文章:

  • 企业架构LNMP学习笔记27
  • 品牌策划经理工作内容|工作职责|品牌策划经理做什么?
  • 【设计模式】三、概述分类+单例模式
  • 手把手教学 Springboot+ftp+下载图片
  • LaaS LLM as a service
  • 数据结构与算法(一)数组的相关概念和底层java实现
  • 歌曲推荐《最佳损友》
  • 多元共进|科技促进艺术发展,助力文化传承
  • Java集合(Collection、Iterator、Map、Collections)概述——Java第十三讲
  • topscoding主题库模板题
  • Linux--进程间通讯--FIFO(open打开)
  • 哪里可以了解轻量的工作流引擎?
  • lvs负载均衡、LVS集群部署
  • 如何应对核心员工提离职?
  • 建站系列(八)--- 本地开发环境搭建(WNMP)
  • 21天学会C++:Day8----范围for与nullptr
  • Linux——环境变量
  • Screen的详细全面安装教程及Screen的用法
  • 生成树、Prufer序列的计数问题:0912T1
  • SQL_牛客网_SQL264_求每个登陆日期的次日留存率
  • Hive 基础知识
  • 【数据结构】树的基础知识及三种存储结构
  • ABB 3BHB003688R0101接口模块
  • 精简 jre 涉坑记录
  • Java程序员学习算法路线规划总结
  • 火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术
  • 深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码
  • Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误
  • Swing程序设计(3)JDialog窗体
  • 类和对象(1)