Spring Boot 数据校验@Valid+统一异常处理的实现

让我来详细讲解“Spring Boot 数据校验@Valid+统一异常处理的实现”的完整攻略。

1. 设置依赖

pom.xml 文件中添加以下依赖:

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

<!-- 添加 validation 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<!-- 添加统一异常处理依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 实体类参数校验

在实体类参数上使用注解来指定校验规则。示例中创建了一个User实体类并添加了校验规则。其中,name 字段必须填写,长度为 2 至 12 个字符,age 字段必须在 0 至 120 之间。

public class User {
    @NotBlank(message = "名字不能为空")
    @Length(min = 2, max = 12, message = "名字长度需在 2 到 12 个字符之间")
    private String name;

    @Range(min = 0, max = 120, message = "年龄需在 0 到 120 岁之间")
    private int age;

    // Getters and Setters
}

3. 控制层方法参数校验

在控制层方法参数上使用 @Valid 注解来启用校验。

@PostMapping("/user")
public ResponseEntity<String> addUser(@Valid @RequestBody User user) {
    // 处理添加用户请求
    return ResponseEntity.ok("用户添加成功");
}

4. 统一处理异常

使用 @ExceptionHandler 注解来处理校验异常。首先创建一个自定义的异常类 ValidationException,并在控制层中使用 @ExceptionHandler 注解来捕获此异常并返回异常信息:

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ValidationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public Map<String, Object> handleValidationException(ValidationException e) {
        Map<String, Object> error = new HashMap<>();
        error.put("code", HttpStatus.BAD_REQUEST.value());
        error.put("message", e.getMessage());
        return error;
    }
}

public class ValidationException extends RuntimeException {
    public ValidationException(String message) {
        super(message);
    }
}

5. 测试示例

示例 1:参数校验失败

发送如下请求:

POST /user HTTP/1.1
Content-Type: application/json

{
  "name": "",
  "age": 150
}

返回如下信息:

HTTP/1.1 400 Bad Request

{
  "code": 400,
  "message": "名字不能为空"
}

示例 2:参数校验成功

发送如下请求:

POST /user HTTP/1.1
Content-Type: application/json

{
  "name": "Tom",
  "age": 21
}

返回如下信息:

HTTP/1.1 200 OK

"用户添加成功"

以上是“Spring Boot 数据校验@Valid+统一异常处理的实现”的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 数据校验@Valid+统一异常处理的实现 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Spring Boot Shiro在Web应用中的作用详解

    Spring Boot Shiro在Web应用中的作用详解 简介 Spring Boot Shiro是基于Spring Boot和Shiro的安全管理框架,可以方便地集成到Web应用中。它提供了一种简单、灵活且强大的身份验证和授权机制,可以在应用中实现多种安全需求,并且易于扩展和定制。 快速开始 依赖 在您的pom.xml文件中添加Spring Boot S…

    Java 2023年6月2日
    00
  • Struts2 $,#,%详解及实例代码

    Struts2 $,#,% 详解及实例代码 引言 在处理 Struts2 代码时,经常可以看到一些用于处理 EL 表达式和字符串的字符,例如 $、#、% 等。这些字符在 Struts2 的开发中可以起到非常关键的作用。本文将介绍以下几个知识点: 关于 $、#、% 三个字符的作用以及使用场景 $ 和 # 在 Struts2 中的区别 $ 和 # 的示例代码 %…

    Java 2023年5月20日
    00
  • spring的IoC和DI详解

    Spring的IoC和DI详解 Spring是一款基于IoC和DI实现的轻量级的Java框架,IoC和DI是其最核心的特性。下面将详细讲解Spring的IoC和DI。 什么是IoC IoC(Inversion of Control)即控制反转,是指将对象的创建,依赖关系的处理等过程交给框架来管理,而不是由程序员手动处理。 在传统的程序设计中,当我们需要一个对…

    Java 2023年5月20日
    00
  • 如何基于SpringBoot部署外部Tomcat过程解析

    准备工作 在开始部署外部Tomcat之前,我们需要先准备好以下几点: 安装好Java环境,并配置好环境变量; 下载并解压Tomcat,建议下载Tomcat 9.x 版本; 新建一个Spring Boot项目,并配置好pom.xml文件,引入所需的相关依赖。 配置外部Tomcat与Spring Boot项目的关联 接下来,我们要将Spring Boot项目部署…

    Java 2023年6月2日
    00
  • SpringBoot Security从入门到实战示例教程

    SpringBoot Security从入门到实战示例教程 SpringBoot Security 是一个基于Spring Boot的安全框架,提供了许多安全功能,比如身份验证、授权、攻击防护等。本教程将带你从入门到实战,讲解SpringBoot Security的使用方法。 准备工作 在开始学习SpringBoot Security之前,需要先了解Spri…

    Java 2023年6月3日
    00
  • Spring Boot实现功能的统一详解

    Spring Boot实现功能的统一详解 什么是Spring Boot Spring Boot是一个基于Spring框架的轻量级应用程序开发框架,可以帮助开发者快速搭建、配置和部署应用程序。Spring Boot提供了默认配置,可以自动配置应用程序,开发者不必自行配置。 Spring Boot的优点 快速搭建:只需要一个jar包,就可以将应用程序一键打包部署…

    Java 2023年5月15日
    00
  • Java之常用类小结案例讲解

    “Java之常用类小结案例讲解”是一篇介绍Java常用类的文章,主要说明了Java中常用的String、Scanner、Random、Math、ArrayList等类的使用方法和注意事项。本文旨在帮助Java初学者更好地熟悉Java中常用的类。以下是详细的攻略。 一、常用类介绍 1. String类 String类是Java中常用的类之一,主要用于存储字符串…

    Java 2023年5月26日
    00
  • java编程ThreadLocal上下传递源码解析

    Java编程ThreadLocal上下传递源码解析 什么是ThreadLocal ThreadLocal是Java的一个线程局部变量,也就是说它为线程提供了一个在其中存储数据的特定位置,而这个数据对其他线程而言是不可见的。ThreadLocal可以避免对线程同步的使用,降低多线程环境下锁的繁琐程度,同时也确保了多线程环境下的数据安全性。 ThreadLoca…

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