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日

相关文章

  • 基于Java protected的深入理解

    基于Java protected的深入理解 在Java中,protected是一种访问修饰符,它的作用是控制类的成员变量和成员方法的访问范围。在本文中,我们将探讨protected修饰符的具体用法和相关知识点。 protected修饰符的作用 protected修饰符可以使得一个类的成员变量和成员方法在该类的子类和同一包中的其他类中访问。同时,它也可以保证该…

    Java 2023年5月26日
    00
  • MyBatis开发Dao层的两种方式实现(原始Dao层开发)

    下面就来详细讲解”MyBatis开发Dao层的两种方式实现(原始Dao层开发)”的完整攻略。 1. 简介 Dao层是指数据访问对象层,负责与数据存储交互,实现数据的增删改查等一系列数据操作。在MyBatis开发中,Dao层有两种实现方式:原始Dao层开发和Mapper接口方式开发。 本文将详细介绍原始Dao层开发的实现流程和具体代码实现。原始Dao层开发是最…

    Java 2023年5月19日
    00
  • Sprint Boot @JsonInclude使用方法详解

    @JsonInclude是Spring Boot中的一个注解,用于指定在序列化Java对象为JSON字符串时,哪些字段需要包含在内。在本文中,我们将详细介绍@JsonInclude注解的作用和使用方法,并提供两个示例。 @JsonInclude注解的作用 @JsonInclude注解用于指定在序列化Java对象为JSON字符串时,哪些字段需要包含在内。当使用…

    Java 2023年5月5日
    00
  • 什么是线程安全的缓存?

    以下是关于线程安全的缓存的完整使用攻略: 什么是线程安全的缓存? 线程安全的缓存是指在多线程环境下,多个线程可以同时访问缓存中的数据而不会出现不一致或程序崩溃等问题。在多线程编程中,线程安全的缓存是非常重要的,为多个线同时访问缓存,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的缓存? 了实现线程安全的缓存,需要使用同步机来保证多个线程对…

    Java 2023年5月12日
    00
  • Java线程关闭的3种方法

    下面我会详细讲解Java线程关闭的3种方法。 1. 使用标志位关闭线程 原理 使用一个boolean类型的变量作为线程的标志位,当需要关闭线程时,将标志位设为false,在run方法中判断标志位,如果为false,则退出线程。 示例代码 public class StopThreadByFlag extends Thread { private volati…

    Java 2023年5月18日
    00
  • IntelliJ IDEA配置java环境及解决IDEA不能直接运行单个JAVA文件的问题

    下面我会详细讲解一下“IntelliJ IDEA配置java环境及解决IDEA不能直接运行单个JAVA文件的问题”的完整攻略,主要内容包括以下几个方面: 安装jdk 配置环境变量 配置IntelliJ IDEA的java环境 解决IDEA不能直接运行单个JAVA文件的问题 首先,我们需要先下载并安装jdk。以jdk1.8为例,下载后直接按照默认的安装路径进行…

    Java 2023年5月26日
    00
  • bootstrap自定义样式之bootstrap实现侧边导航栏功能

    下面是关于“bootstrap自定义样式之bootstrap实现侧边导航栏功能”的完整攻略: 什么是Bootstrap? Bootstrap是一种流行的CSS框架,可帮助开发人员快速创建响应式网站。它提供了大量的CSS和JavaScript组件,可以轻松添加到你的网站上。它不仅可以帮助节省开发时间,还可以提高网站的可访问性和易用性。 Bootstrap如何实…

    Java 2023年5月30日
    00
  • Request获取Session的方法总结

    Request获取Session的方法总结 Session是Web开发中常见的一种用户状态管理方式,可以在不同的页面之间传递和共享数据。在Python Web框架中,常用的Session实现方式是通过Request对象获取Session。以下是关于Request获取Session的方法总结。 通过Request的cookies属性获取Session Sess…

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