解决get请求入参@NotNull验证不生效问题

针对“解决get请求入参@NotNull验证不生效问题”的问题,我们可以采取以下步骤进行解决。

  1. 引入相关依赖

首先,在 pom.xml 文件中添加以下依赖:

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

以上依赖可以引入 Spring Boot 默认提供的校验工具,包括了常用的校验注解。

  1. 在接口参数上添加校验注解

在接口参数上可以根据需要添加不同的校验注解,比如我们需要验证一个参数不为 null,则可以添加 @NotNull 注解,如下所示:

@GetMapping("/test")
public void testMethod(@RequestParam(name = "param") @NotNull String param) {
    // do something
}

上述代码中的 @NotNull 注解表示 param 参数不能为空,如果传入的参数为 null,则会校验失败,并且会返回校验错误信息。

  1. 添加全局异常处理器

如果使用上述方法添加了校验注解,但在实际使用中却发现校验不生效,可能是因为我们没有添加全局异常处理器,导致校验错误信息无法被捕捉到。

在 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 中返回。

  1. 示例说明

我们以 GET 方式传参的场景为例来展示上述方法的使用。

首先,使用 Postman 等工具发送一个 GET 请求,携带一个空参数 param,如下所示:

http://localhost:8080/test?param=

此时应该会收到 400 错误响应,响应内容为参数校验失败的错误信息。

如果我们将 param 参数设置为非空值,再次发送请求,则应该会成功通过校验并返回正常响应。

结论:通过引入校验工具和添加全局异常处理器,我们可以解决 GET 请求入参 @NotNull 验证不生效的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决get请求入参@NotNull验证不生效问题 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • JavaWeb开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)

    JavaWeb开发中,JSTL标签库是用来简化代码、提高开发效率的工具。它包括Core、Format、XML、SQL、Functions等多个标签库,可用于处理和展示数据、格式化输出文本、操作XML数据等。 JSTL标签库的使用 JSTL标签库可以在jsp页面中使用,需要引入标签库的命名空间,例如: <%@ taglib uri="http:…

    Java 2023年5月27日
    00
  • springboot项目启动慢的问题排查方式

    当Spring Boot项目启动慢或者无法正常启动时,可以采用以下排查方式: 一、查看启动日志输出,分析问题 启动Spring Boot项目时,可以查看控制台输出的启动日志,了解项目启动时的具体情况。如果日志中有异常或者错误信息,可以根据异常信息进行问题排查。 查看日志的方式有两种: 直接查看控制台输出的日志信息。 将日志输出到文件中,可以通过配置日志级别、…

    Java 2023年5月20日
    00
  • java对象序列化与反序列化的默认格式和json格式使用示例

    Java对象序列化和反序列化是Java中常用的数据交换方式,其中序列化是将Java对象转换为字节流,可以储存到文件或网络流中,反序列化则是将字节流转换为Java对象。在Java中,序列化和反序列化的默认格式是二进制格式,而JSON格式则更加通用并且易于阅读。 默认格式的使用示例 序列化 当我们需要将一个Java对象进行序列化时,我们可以使用 ObjectOu…

    Java 2023年5月26日
    00
  • JAVA中的for循环几种使用方法讲解

    JAVA中的for循环几种使用方法讲解 在Java中,for循环是最常用的循环结构之一。它可以重复执行代码块,根据不同的循环条件可以有多种使用方式。 基本的for循环 最基本的for循环有三个部分,分别是循环变量初始化、循环条件和循环变量的更新。语法如下: for (循环变量初始化; 循环条件; 循环变量的更新) { // 循环体代码块 } 其中,循环变量初…

    Java 2023年5月26日
    00
  • Tomcat中catalina.out 和 catalina.log的区别和用途详解

    题目:Tomcat中catalina.out 和 catalina.log的区别和用途详解 概述 在Tomcat的日志输出中,经常出现catalina.out和catalina.log两个常用的日志文件,本篇攻略主要介绍这两个日志文件的区别和用途。 区别 在Tomcat中,catalina.out和catalina.log两个日志文件的区别主要表现在以下几个…

    Java 2023年6月2日
    00
  • Java中的死锁是什么?

    Java中的死锁是指两个或多个线程在等待对方释放资源时无限期地阻塞的状态,而无法继续执行。这种情况出现在多个线程互相持有对方所需要的锁时,彼此都无法继续执行,就会形成死锁。 以下是两个简单的示例: 示例一: public class DeadlockExample { private static final String resource1 = &quot…

    Java 2023年4月27日
    00
  • 浅谈MyBatis-plus入门使用

    浅谈MyBatis-plus入门使用 MyBatis-plus(以下简称MP)是一个为MyBatis框架提供增强功能的第三方库,旨在简化MyBatis的开发。本文将深入浅出地探讨MP的入门使用。 安装 将以下依赖添加到Maven或Gradle项目中: <!– MyBatis-plus –> <dependency> <gro…

    Java 2023年5月19日
    00
  • Java EE实现用户后台管理系统

    听起来您需要了解如何使用Java EE实现用户后台管理系统的攻略,下面是一些基本步骤: 1. 确定需求和功能 在开发用户后台管理系统之前,首先需要明确系统的功能和需求。例如,您需要确定用户是否需要注册,登陆,管理数据等功能需求。这些需求和功能可以形成您设计和开发系统的蓝图。 2. 选择合适的框架 选择适合您的开发需求的框架是非常重要的。Java EE中有很多…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部