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

相关文章

  • jquery popupDialog 使用 加载jsp页面的方法

    下面是使用jquery popupDialog加载jsp页面的完整攻略步骤: 步骤一:引入jQuery popupDialog插件库 首先需要在html页面中引入jquery popupDialog插件库,这里可以使用CDN方式或下载本地文件。 <!– 引入jquery库 –> <script src="https://cdn…

    Java 2023年6月15日
    00
  • 每日几道java新手入门面试题,通往自由的道路

    完整攻略 理解面试题的重要性 在准备面试题之前,你需要理解面试题的重要性。它不仅可以帮助你提高自己的知识水平,还可以更好地准备面试,提高面试的通过率。同时,每道面试题都可以涉及到各种Java基础知识点的理解和运用,对于初学者而言这是非常有帮助的。 搜索并选择题目 在过去的每日几道Java新手入门面试题中,你需要选择那些与你的Java基础知识匹配的面试题,因为…

    Java 2023年5月19日
    00
  • 常见的Java压力测试工具有哪些?

    常见的Java压力测试工具有许多,其中比较常用的有JMeter、Gatling、Apache Bench (ab)等。下面分别介绍它们的使用方法。 JMeter 简介 Apache JMeter是一个开放源代码的Java应用程序,主要用于对软件进行性能测试,它最初是为Web应用程序的测试而开发的。它可以用于测试静态和动态资源(如动态参数的参数化,用户输入,C…

    Java 2023年5月11日
    00
  • spring aop底层原理及如何实现

    我们来详细讲解“Spring AOP的底层原理及如何实现”。 1. 概述 Spring框架提供了面向切面编程(AOP)的支持,它可以通过配置的方式很方便地实现各种切面。Spring AOP遵循了AOP的标准规范,将横切关注点和核心业务逻辑进行分离。Spring AOP底层是基于动态代理的实现方式。 2. 动态代理 Spring AOP底层是基于动态代理的实现…

    Java 2023年5月27日
    00
  • java+jdbc+mysql+socket搭建局域网聊天室

    搭建局域网聊天室的完整攻略需要分为两个大步骤:第一步是利用Java编写前端应用程序,第二步是搭建后端服务器和数据库。 前端应用程序 前端应用程序使用Java编写,涉及到JDBC的使用和Socket编程。 1. 编写UI界面 首先,需要编写一个简单的UI界面,用于用户输入聊天室的地址和端口号,以及昵称和消息发送框。 public class ChatRoomC…

    Java 2023年6月1日
    00
  • Springboot基于maven打包分离lib及resource

    下面是Spring Boot基于Maven打包分离lib及resource的完整攻略: 1. Maven打包 Maven项目中使用Maven插件进行打包,将项目代码打包成可执行JAR文件。具体步骤如下: 在Maven项目的pom.xml文件中,配置插件spring-boot-maven-plugin,如下所示: xml <build> <p…

    Java 2023年5月20日
    00
  • JSP中实现系统登录后的退出原理及代码

    一、JSP中实现系统登录后的退出原理 在JSP中实现系统登录后的退出,其原理其实非常简单,就是使用户的会话失效。当用户在浏览器中点击退出登录操作时,我们需要做的就是销毁当前用户的会话,这样在之后的会话中,用户就需要重新进行登录验证。 JSP中实现会话失效有两种方式: 1.使用Session.invalidate()方法 在JSP页面中,当用户点击退出登录时,…

    Java 2023年6月15日
    00
  • Java Socket编程实现简单的问候服务

    下面我将为您详细讲解如何使用Java Socket编程实现简单的问候服务。 介绍 在计算机网络中,Socket是一种通信机制,通常用于将应用程序连接到网络上的其他应用程序。Java提供了Socket类来实现Socket编程,可以用于构建各种类型的网络应用程序。本文将介绍如何使用Java Socket编程实现简单的问候服务。 实现步骤 创建一个ServerSo…

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