Spring boot进行参数校验的方法实例详解

Spring Boot进行参数校验的方法实例详解

什么是参数校验

参数校验是指在方法调用时,检查方法参数的合法性。如果不合法,则直接抛出IllegalArgumentException 异常,避免了程序继续执行而造成更严重的后果。

Spring Boot参数校验的实现方式

在Spring Boot中,提供了javax.validation API来进行参数校验。使用方法如下:

1.引入相应的依赖:

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

2.在需要进行校验的参数上添加注解,比如@NotNull、@Min、@Max等注解,示例如下:

public class User {

    @NotNull(message = "用户名不能为空")
    private String username;

    @Min(value = 18, message = "年龄不能小于18岁")
    private int age;

    // getter和setter方法省略
}

说明:@NotNull注解表示该参数不能为空,@Min注解表示该参数的值要大于等于指定值。

3.在Controller层中使用@Validated注解,并在需要校验的参数前添加@Valid注解,示例如下:

@RestController
@RequestMapping("/user")
@Validated
public class UserController {

    @PostMapping("/add")
    public String addUser(@Valid @RequestBody User user) {
        // 省略业务代码
    }
}

说明:@Validated注解用于开启Spring对校验注解的支持,@Valid注解表示要对该参数进行参数校验。

4.定义异常处理类来处理校验异常,示例如下:

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
        // 获取校验错误信息
        String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
        // 返回错误信息
        return Result.error(msg);
    }
}

说明:@ExceptionHandler注解用于处理MethodArgumentNotValidException异常,getBindingResult()方法获取校验错误信息,使用stream和map进行处理返回格式化后的错误信息。

参数校验示例

示例一

定义一个UserController用于添加用户信息,其中用户信息不能为空,年龄不能小于18岁。如果用户信息不合法,则返回错误信息。

User.java

public class User {

    @NotNull(message = "用户名不能为空")
    private String username;

    @Min(value = 18, message = "年龄不能小于18岁")
    private int age;

    // getter和setter方法省略
}

UserController.java

@RestController
@RequestMapping("/user")
@Validated
public class UserController {

    @PostMapping("/add")
    public String addUser(@Valid @RequestBody User user) {
        // 省略业务代码
    }
}

GlobalExceptionHandler.java

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
        // 获取校验错误信息
        String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
        // 返回错误信息
        return Result.error(msg);
    }
}

示例二

定义一个GoodsController用于添加商品信息,其中商品信息不能为空,商品价格必须大于0。如果商品信息不合法,则返回错误信息。

Goods.java

public class Goods {

    @NotNull(message = "商品名不能为空")
    private String name;

    @DecimalMin(value = "0", inclusive = false, message = "价格必须大于0")
    private BigDecimal price;

    // getter和setter方法省略
}

GoodsController.java

@RestController
@RequestMapping("/goods")
@Validated
public class GoodsController {

    @PostMapping("/add")
    public String addGoods(@Valid @RequestBody Goods goods) {
        // 省略业务代码
    }
}

GlobalExceptionHandler.java

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
        // 获取校验错误信息
        String msg = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining(","));
        // 返回错误信息
        return Result.error(msg);
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring boot进行参数校验的方法实例详解 - Python技术站

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

相关文章

  • Netty4之如何实现HTTP请求、响应

    Netty4 是一个开源的、事件驱动的、异步的、高性能的网络通信框架,支持多种协议通信。Netty4 同时支持 HTTP 和 HTTP/2 协议,本文将介绍如何在 Netty4 中实现 HTTP 请求和响应的过程和示例。 简介 Netty4 实现 HTTP 请求、响应的过程主要分为以下几个步骤: 创建 HTTP Server。 绑定端口启动 HTTP Ser…

    Java 2023年5月20日
    00
  • PHP实现QQ空间自动回复说说的方法

    PHP实现QQ空间自动回复说说的方法 简介 在 PHP 中,可以通过调用第三方库实现登录QQ空间并发布评论、回复的功能。本文将介绍如何使用 PHP 向指定好友的说说进行自动回复。 整体思路 通过 QQ 登录,查找到指定好友的说说,获取说说的ID。通过模拟请求,向该说说增加回复。 具体来讲,可以分为以下步骤: 1.模拟登录 QQ 空间,获取 session、c…

    Java 2023年6月16日
    00
  • 解读maven配置阿里云镜像问题

    当使用 Maven 构建项目时,如果从默认的 Maven Central Repository服务器下载依赖包速度比较慢,可以使用阿里云镜像来加速下载。 以下是解读 Maven 配置阿里云镜像问题的步骤: 步骤一:打开Maven配置文件 首先找到 Maven 的配置文件 settings.xml,一般情况下该文件位于 ~/.m2/ 目录下。如果不存在该文件,…

    Java 2023年5月20日
    00
  • 详解Java中的线程让步yield()与线程休眠sleep()方法

    我们来详细讲解一下Java中线程让步(yield())和线程休眠(sleep())方法的用法和区别。 一、线程让步(yield()) 线程让步是指让出当前线程对CPU的占用权,使得其他等待执行的线程有机会运行。Java中提供了线程让步的方法yield()。 其语法格式如下: public static void yield() 实例: 下面是一个简单的示例,…

    Java 2023年5月19日
    00
  • 使用Spring Boot 2.x构建Web服务的详细代码

    下面就是针对使用Spring Boot 2.x构建Web服务的完整攻略: 1. 创建Spring Boot项目 首先,我们需要在IDE或者命令行中创建一个Spring Boot项目。使用IDE可以直接创建一个Spring Boot项目模板;使用命令行则需要使用Maven构建,具体做法如下: 首先,我们需要在本地装好Maven,然后在命令行中输入 mvn ar…

    Java 2023年5月19日
    00
  • Java中有哪些类型的异常?

    Java中异常的类型可以分为两类:检查性异常(Checked Exception)和非检查性异常(Unchecked Exception)。 检查性异常(Checked Exception) 检查性异常是指在编译阶段进行检查的异常,如果程序中出现了这些异常,编译器会提示你必须处理该异常。这些异常通常属于外部环境引起的异常,比如I/O异常、SQL异常等。 Ja…

    Java 2023年4月27日
    00
  • Spring配置数据源流程与作用详解

    Spring配置数据源流程与作用详解 什么是数据源 在编写Java Web应用时,我们经常需要连接数据库。而Spring提供了JdbcTemplate等API帮助我们对数据库进行操作。但是在使用这些API之前我们需要先获得一个数据源(DataSource)对象。数据源是一个能够建立数据库连接的工厂,它将数据库的连接细节封装了起来,同时提供了有效,可重复的数据…

    Java 2023年5月19日
    00
  • Java学习的捷径

    Java学习的捷径攻略 Java是一门大而全的编程语言,想要学好它需要付出大量的时间和精力。但是,有些捷径可以帮助你在短时间内快速学好Java,本文将详细讲解Java学习的捷径攻略。 1. 阅读优秀的Java代码 阅读优秀的Java代码是学习Java的捷径之一。通过阅读其他程序员的代码,可以帮助你更好地了解Java编程语言的语法和结构以及常用的Java编程技…

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