关于SpringBoot中controller参数校验的使用

对于SpringBoot中的参数校验,我们可以使用JSR-303规范提供的注解对Controller层的方法参数进行校验。具体实现方式如下:

  1. 引入依赖

首先需要引入spring-boot-starter-validation依赖,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 标注注解

在需要进行校验的方法参数上标注注解,例如@NotNull、@NotBlank、@Min、@Max等等。例如我们有一个用户类:User,它有两个属性username和age,现在我们需要在Controller层的方法中对User的参数进行校验,可以在User类的属性上标注注解,例如:

public class User {

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

    @Min(value = 18, message = "年龄不能低于18岁")
    @Max(value = 60, message = "年龄不能高于60岁")
    private Integer age;

    // Getter和Setter方法省略
}
  1. 在Controller层方法中使用@Validated注解和BindingResult对象

在Controller中的方法上使用@Validated注解对方法的参数进行校验,同时需要在方法参数中使用BindingResult对象来接收错误信息,例如:

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

    @PostMapping("/save")
    public ResponseEntity saveUser(@RequestBody @Validated User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            String errorMessage = bindingResult.getFieldError().getDefaultMessage();
            return ResponseEntity.badRequest().body(errorMessage);
        }

        // do something with valid user
        return ResponseEntity.ok("User saved successfully");
    }
}

上述代码中的@RequestBody注解用于将HTTP请求体绑定到方法参数,@Validated注解用于对方法参数进行校验,BindingResult对象用于接收校验结果。

当出现校验错误时,bindingResult对象中会有错误信息,我们可以通过getFieldError().getDefaultMessage()方法获取默认的错误信息。

  1. 示例1:校验GET请求参数

假设用户想要查询某个区间的商品价格,根据输入的价格区间进行查询。我们可以定义一个PriceRange类,它有两个属性:minPrice和maxPrice。在Controller中的方法上用@Validated和PriceRange对象进行校验,示例代码如下:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class PriceRange {

    @NotNull(message = "最低价格不能为空")
    @Min(value = 0, message = "最低价格不能小于0")
    private BigDecimal minPrice;

    @NotNull(message = "最高价格不能为空")
    private BigDecimal maxPrice;

    // Getter和Setter方法省略
}

@RestController
@RequestMapping("/product")
public class ProductController {

    @GetMapping("/list")
    public ResponseEntity getProductList(@Validated PriceRange priceRange, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            String errorMessage = bindingResult.getFieldError().getDefaultMessage();
            return ResponseEntity.badRequest().body(errorMessage);
        }

        // do something with valid price range
        return ResponseEntity.ok("Product list retrieved successfully");
    }
}

访问接口:http://localhost:8080/product/list?minPrice=10&maxPrice=20

注:注意使用@NotNull对minPrice进行校验

  1. 示例2:校验POST请求参数

假设用户要新增一个订单,订单包含商品标识符、购买数量、收货人信息等属性。我们可以定义一个Order类,假设其中有两个属性productId和orderQuantity,在Controller中的方法上用@Validated和Order对象进行校验,示例代码如下:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Order {

    @NotBlank(message = "商品标识符不能为空")
    private String productId;

    @NotNull(message = "订单数量不能为空")
    @Min(value = 1, message = "订单数量不能小于1")
    private Integer orderQuantity;

    // Getter和Setter方法省略
}

@RestController
@RequestMapping("/order")
public class OrderController {

    @PostMapping("/add")
    public ResponseEntity addOrder(@RequestBody @Validated Order order, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            String errorMessage = bindingResult.getFieldError().getDefaultMessage();
            return ResponseEntity.badRequest().body(errorMessage);
        }

        // do something with valid order
        return ResponseEntity.ok("Order added successfully");
    }
}

测试代码:

curl --location --request POST 'http://localhost:8080/order/add' \
--header 'Content-Type: application/json' \
--data-raw '{
    "productId": "123",
    "orderQuantity": 2
}'

注:注意使用@NotBlank对productId进行校验

以上就是关于SpringBoot中controller参数校验的完整攻略,希望对您有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于SpringBoot中controller参数校验的使用 - Python技术站

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

相关文章

  • Java实战之简单的文件管理器

    Java实战之简单的文件管理器 概述 本篇攻略将介绍如何使用Java编写一个简单的文件管理器,主要实现以下功能: 显示指定目录下的文件和子目录 创建新目录 创建新文件 复制文件 移动文件 删除文件 开始 1. 建立项目 使用Eclipse或者IntelliJ IDEA等开发工具,建立一个新的Java项目。 2. 创建主类 创建一个名为FileManager的…

    Java 2023年5月20日
    00
  • SpringBoot整合Thymeleaf小项目及详细流程

    Spring Boot整合Thymeleaf小项目及详细流程 本文将介绍如何使用Spring Boot整合Thymeleaf模板引擎,以及详细的流程和示例。 什么是Thymeleaf Thymeleaf是一种现代化的服务器端Java模板引擎,它可以处理HTML、XML、JavaScript、CSS甚至纯文本。它的主要目标是为Web和独立环境创建优雅的自然模板…

    Java 2023年5月15日
    00
  • Java基础教程之类数据与类方法

    下面是关于“Java基础教程之类数据与类方法”的完整攻略: 1.什么是类数据与类方法? 在Java中,类是一个封装数据和方法的概念。类定义了一种抽象数据类型,里面包含了一种或多种数据,并定义了对这些数据的操作方法。在类内部,可以定义两种方法:实例方法和静态方法。而“类数据”和“类方法”常常也被称作“静态数据”和“静态方法”。它们分别属于类本身,而不是类的某个…

    Java 2023年5月23日
    00
  • 使用idea的database模块绘制数据库er图的方法

    使用Idea的Database模块可以非常方便地绘制数据库ER图,具体的步骤如下: 1. 安装Idea的Database插件 首先,我们需要在Idea的插件库中搜索“Database”,然后按照提示安装该插件。 2. 连接数据库 连接数据库的过程可以有多种方式,这里我们以连接MySQL数据库为例: 点击左上角的“Database”按钮,进入“Database…

    Java 2023年5月20日
    00
  • mybatis抽取基类BaseMapper增删改查的实现

    下面我将详细讲解如何使用mybatis抽取基类BaseMapper实现增删改查的完整攻略。 什么是BaseMapper 在使用MyBatis进行开发时,我们通常会对CRUD进行封装,然后在具体操作某个表时,通过继承该封装类来实现对该表的操作。但是,这样做的弊端就是复用性不高,每次都需要为每个表都写一遍操作代码,重复劳动十分麻烦。为了解决这个问题,我们可以自己…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“ChainNotFoundException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ChainNotFoundException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置ActionChain,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 类路径问题:如果类路径不正确,则可能会出现此。在种情况下,需要检查类路径以解决此问题。 以下是两个实例: …

    Java 2023年5月5日
    00
  • 使用WebUploader实现上传文件功能(一)

    使用WebUploader实现上传文件功能(一)是一篇介绍如何在网站中使用WebUploader插件来实现文件上传功能的文章。 以下是该文章的详细攻略: 1. 确认环境 在使用WebUploader之前,需要确认网站中是否已经引入了jQuery和WebUploader的JavaScript文件。如果没有引入,需要先在需要使用上传功能的页面中引入这些文件。 2…

    Java 2023年6月15日
    00
  • 关于C#继承的简单应用代码分析

    下面就是“关于C#继承的简单应用代码分析”的攻略: 什么是继承? 在面向对象的编程中,继承是一个重要的概念。继承是指一个类可以从另一个类中继承其成员,包括字段和方法。从父类继承的成员可以被子类直接使用,也可以被子类重写。 如何使用继承? 在C#中,使用冒号(:)来指示一个类继承自另一个类。例如: class Animal { public void Eat(…

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