如何在springboot中引入参数校验
一、概要
一般我们判断前端传过来的参数,需要对某些值进行判断,是否满足条件。
而springboot相关的参数校验注解,可以解决我们这个问题。
二、快速开始
首先,我用的springboot版本是 3.1.5
引入参数校验相关依赖
<!--1.导入JSR303规范--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
定义实体类,并在实体类上加入相关注解。
public class Dept { private Integer id; //ID @NotNull private String name; //部门名称 private LocalDateTime createTime; //创建时间 private LocalDateTime updateTime; //修改时间 }
在controller层 给需要校验的参数加上 @ Validated
@PostMapping("/depts") public Result addDept( @RequestBody @Validated Dept dept){ //这里应该判断是否返回成功 deptService.addDept(dept); return Result.success(); }
此时如果再进行传入参数,如果name为null 就会报错。
三、额外补充
在前面我们谈到了校验的基本用法,但在开发中,我需要对这些异常进行统一处理,并返回符合相应规则的返回值。
因此,需要用到全局异常处理。
让gpt解答一下:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<ErrorResponse> handleValidationException(MethodArgumentNotValidException ex) { BindingResult bindingResult = ex.getBindingResult(); List<String> errors = bindingResult.getFieldErrors().stream() .map(FieldError::getDefaultMessage) .collect(Collectors.toList()); ErrorResponse response = new ErrorResponse("Validation Failed", errors); return ResponseEntity.badRequest().body(response); } }
bindingResult.getAllErrors(); getFieldErrors() 有什么区别?
@RestController @RequestMapping("/users") public class UserController { @PostMapping public ResponseEntity<String> createUser(@Validated @RequestBody User user, BindingResult result) { if (result.hasErrors()) { // 获取字段错误列表 List<FieldError> fieldErrors = result.getFieldErrors(); // 遍历字段错误列表,输出错误信息 for (FieldError error : fieldErrors) { String fieldName = error.getField(); String errorMessage = error.getDefaultMessage(); System.out.println("字段名:" + fieldName + ",错误信息:" + errorMessage); } return ResponseEntity.badRequest().body("参数校验失败"); } // 校验通过,处理创建用户的逻辑 return ResponseEntity.ok("用户创建成功"); } }
到此这篇关于如何在springboot中引入参数校验的文章就介绍到这了,更多相关springboot参数校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Struts2拦截器Interceptor的原理与配置实例详解
拦截器是一种AOP(面向切面编程)思想的编程方式.它提供一种机制是开发者能够把相对独立的代码抽离出来,配置到Action前后执行。下面这篇文章主要给大家介绍了关于Struts2拦截器Interceptor的原理与配置的相关资料,需要的朋友可以参考下。2017-11-11Springboot编写CRUD时访问对应数据函数返回null的问题及解决方法
我在学习springboot,其中在编写CRUD时发现访问数据的函数执行下去返回值是null但是其它部分正常,这篇文章主要介绍了Springboot在编写CRUD时,访问对应数据函数返回null,需要的朋友可以参考下2024-02-02关于mybatis3中@SelectProvider的使用问题
这篇文章主要介绍了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一个Class及其方法,并且通过调用Class上的这个方法来获得sql语句,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2021-12-12Java8 使用 stream().sorted()对List集合进行排序的操作
这篇文章主要介绍了Java8 使用 stream().sorted()对List集合进行排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-10-10
最新评论