关于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日

相关文章

  • spring boot实现上传图片并在页面上显示及遇到的问题小结

    下面我会详细讲解“spring boot实现上传图片并在页面上显示及遇到的问题小结”的完整攻略。 1. 准备工作 在开始实现上传图片并在页面上显示之前,我们需要先准备好以下的环境和工具: JDK(>=1.8) Maven Spring Boot Thymeleaf Bootstrap jQuery 2. 实现上传图片 在Spring Boot中实现上传…

    Java 2023年5月20日
    00
  • python em算法的实现

    Python EM算法的实现 EM算法(Expectation-Maximization algorithm)是一种迭代求解极大似然估计或极大后验概率估计的算法,常用于含有隐变量的概率模型参数的最大似然估计或极大后验概率估计。它是一种迭代算法,每次迭代分两步:期望步骤和最大化步骤。期望步骤求期望得到后验概率分布,最大化步骤求能最大化期望似然函数的模型参数,然…

    Java 2023年5月19日
    00
  • spring boot学习笔记之操作ActiveMQ指南

    下面是对“Spring Boot学习笔记之操作ActiveMQ指南”的详细讲解。 一、前言 ActiveMQ是一个流行的消息队列中间件,它支持多种协议和语言,并且具有可扩展性、高可用性、高吞吐量等特点。本文将介绍如何在Spring Boot项目中使用ActiveMQ进行消息传递,以及使用示例说明。 二、配置ActiveMQ 首先,在Spring Boot项目…

    Java 2023年6月2日
    00
  • 浅谈Java安全编码之文件和共享目录的安全性

    浅谈Java安全编码之文件和共享目录的安全性 背景 在Java应用程序中,对文件和共享目录的访问是很常见的操作。然而,由于文件和共享目录是系统中的敏感资源,需要注意相关的安全问题。本文将讲解如何在Java应用程序中安全地使用文件和共享目录。 文件和共享目录的安全问题 数据隐私 应用程序中的文件和共享目录可能包含敏感的数据,如密码、密钥等,一旦泄漏,将可能引发…

    Java 2023年5月19日
    00
  • 浅谈struts1 & jquery form 文件异步上传

    关于“浅谈struts1 & jquery form 文件异步上传”的完整攻略,我会为您提供以下内容: 简介 在传统的网页文件上传方式中,用户需要选择文件后点击上传按钮,等待上传过程结束。这种方式十分繁琐,特别是对于一些大文件的上传,等待时间更是漫长。为了提高用户体验,减少上传等待时间,异步上传便应运而生。 本篇攻略将讲解如何使用struts1和jq…

    Java 2023年5月20日
    00
  • 解决Maven本地仓库明明有对应的jar包但还是报找不到的问题

    当我们在使用 Maven 构建项目时,有时会出现 Maven 本地仓库中明明已经有对应的 jar 包,但是在使用时却提示找不到该依赖的情况。这种情况一般是因为 Maven 本地仓库的缓存出现问题,以下是解决该问题的几种方法和步骤: 方法一:清空 Maven 本地仓库缓存 打开命令行窗口并进入到 Maven 本地仓库目录,例如在 Windows 操作系统下,打…

    Java 2023年5月26日
    00
  • Windows下搭建Tomcat HTTP服务并发布外网远程访问

    以下是Windows下搭建Tomcat HTTP服务并发布外网远程访问的完整攻略: 1. 安装Java环境 首先需要在本地安装好Java环境,可以到Java官网下载安装包进行安装。 2. 下载Tomcat并解压缩 可在Tomcat官网下载对应版本的Tomcat,下载完成后解压缩到本地的目录,比如:D:\Java\Tomcat。 3. 配置Tomcat 3.1…

    Java 2023年6月15日
    00
  • 详解IDEA搭建springBoot方式一(推荐)

    下面是详细讲解 “详解IDEA搭建springBoot方式一(推荐)” 的完整攻略: 一、前置准备 安装JDK和IntelliJ IDEA。 确认本地已经安装了maven,并且配置了maven环境变量。 二、创建Spring Boot项目 打开IntelliJ IDEA,选择Create New Project。 在左侧的“Spring Initializr…

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