针对“解决get请求入参@NotNull验证不生效问题”的问题,我们可以采取以下步骤进行解决。
- 引入相关依赖
首先,在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
以上依赖可以引入 Spring Boot 默认提供的校验工具,包括了常用的校验注解。
- 在接口参数上添加校验注解
在接口参数上可以根据需要添加不同的校验注解,比如我们需要验证一个参数不为 null,则可以添加 @NotNull 注解,如下所示:
@GetMapping("/test")
public void testMethod(@RequestParam(name = "param") @NotNull String param) {
// do something
}
上述代码中的 @NotNull 注解表示 param 参数不能为空,如果传入的参数为 null,则会校验失败,并且会返回校验错误信息。
- 添加全局异常处理器
如果使用上述方法添加了校验注解,但在实际使用中却发现校验不生效,可能是因为我们没有添加全局异常处理器,导致校验错误信息无法被捕捉到。
在 Spring Boot 中,我们可以通过添加 @ControllerAdvice 注解来实现全局异常处理器,如下所示:
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
/**
* 重写处理 MethodArgumentNotValidException 异常的方法
*/
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
// 获取所有校验失败的错误信息
List<String> errorList = ex.getBindingResult().getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.toList());
// 封装错误信息并返回
return new ResponseEntity<>(errorList, HttpStatus.BAD_REQUEST);
}
}
以上代码中,我们通过重写 handleMethodArgumentNotValid 方法,获取所有校验失败的错误信息,并将其封装在 ResponseEntity 中返回。
- 示例说明
我们以 GET 方式传参的场景为例来展示上述方法的使用。
首先,使用 Postman 等工具发送一个 GET 请求,携带一个空参数 param,如下所示:
http://localhost:8080/test?param=
此时应该会收到 400 错误响应,响应内容为参数校验失败的错误信息。
如果我们将 param 参数设置为非空值,再次发送请求,则应该会成功通过校验并返回正常响应。
结论:通过引入校验工具和添加全局异常处理器,我们可以解决 GET 请求入参 @NotNull 验证不生效的问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决get请求入参@NotNull验证不生效问题 - Python技术站