SpringBoot controller参数校验方法详细讲解

下面我就为您讲解一下“SpringBoot controller参数校验方法详细讲解”的攻略。

一、前言

Spring Boot 是一个非常流行的 Java 开发框架,可用于快速构建高效率的应用程序。在我们使用 Spring Boot 进行开发的过程中,请求参数的校验也是非常重要的一环。本文将详细讲解 Spring Boot Controller 参数校验的方法,包括常用校验注解的使用。

二、常用校验注解

1. @NotNull

@NotNull 注解用于校验参数不能为 null。

@PostMapping("/user")
public String addUser(@NotNull(message = "用户名不能为空") String username,
                      @NotNull(message = "密码不能为空") String password) {
    // 处理逻辑
}

2. @NotBlank

@NotBlank 注解用于校验参数不能为空字符串,同时去除首尾空格后不为空。

@PostMapping("/user")
public String addUser(@NotBlank(message = "用户名不能为空") String username,
                      @NotBlank(message = "密码不能为空") String password) {
    // 处理逻辑
}

3. @Max 和 @Min

@Max 和 @Min 注解用于校验参数的最大值和最小值。

@PostMapping("/goods")
public String addGoods(@NotNull(message = "价格不能为空") @Max(value = 10000, message = "商品价格不能超过10000") BigDecimal price) {
    // 处理逻辑
}

4. @Size

@Size 注解用于校验参数的长度或大小。

@PostMapping("/goods")
public String addGoods(@NotNull(message = "商品名称不能为空") @Size(max = 100, message = "商品名称不能超过100个字符") String name) {
    // 处理逻辑
}

5. @Validated

@Validated 注解用于开启参数校验。

@RestController
@Validated
public class UserController {

    @PostMapping("/user")
    public String addUser(@NotNull(message = "用户名不能为空") String username,
                          @NotNull(message = "密码不能为空") String password) {
        // 处理逻辑
    }
}

三、校验异常处理

在 Spring Boot 中,如果请求参数不符合校验规则,会抛出 ConstraintViolationException 异常,我们可以通过全局异常处理的方式进行处理。

1. 定义异常处理器类

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    public Result handleConstraintViolationException(ConstraintViolationException e) {
        String message = "";
        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
        for (ConstraintViolation<?> violation : violations) {
            message += violation.getMessage() + ";";
        }
        return ResultUtil.error(message);
    }
}

2. 定义返回结果类

public class Result {
    private Integer code;
    private String message;
    private Object data;

    // 省略 get、set 方法
}

3. 测试

@RestController
@Validated
public class UserController {

    @PostMapping("/user")
    public String addUser(@NotNull(message = "用户名不能为空") String username,
                          @NotNull(message = "密码不能为空") String password) {
        // 处理逻辑
    }
}

访问地址 http://localhost:8080/user,请求体:

{
    "username": null,
    "password": null
}

返回结果:

{
  "code": 500,
  "message": "用户名不能为空;密码不能为空;",
  "data": null
}

四、示例

1. 校验对象

@PostMapping("/user")
public String addUser(@Validated @RequestBody User user) {
    // 处理逻辑
}
public class User {

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

    @NotNull(message = "密码不能为空")
    @Size(min = 6, message = "密码长度不能小于 6 位")
    private String password;

    // 省略 get、set 方法
}

2. 校验列表

@PostMapping("/goods")
public String addGoods(@RequestBody @Validated List<Goods> goodsList) {
    // 处理逻辑
}
public class Goods {

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

    @NotNull(message = "价格不能为空")
    @Max(value = 10000, message = "商品价格不能超过10000")
    private BigDecimal price;

    // 省略 get、set 方法
}

以上就是 Spring Boot Controller 参数校验方法的详细讲解,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot controller参数校验方法详细讲解 - Python技术站

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

相关文章

  • JSP、Servlet中get请求和post请求的区别总结

    JSP、Servlet中get请求和post请求的区别总结 在使用JSP和Servlet的过程中,我们经常会使用到HTTP的GET和POST请求方式。这两种方式虽然都是常用的HTTP请求方式,但是在使用上有所区别。 GET请求通常用于获取数据,而POST请求通常用于提交数据。其中GET请求是通过URL传输数据的,而POST请求是通过HTTP的消息主体传输数据…

    Java 2023年6月15日
    00
  • Java循环队列原理与用法详解

    Java循环队列原理与用法详解 什么是循环队列 循环队列是一种经典的队列实现方式,它的特点是:队列的头尾相连,形成了一个环形结构。当队列满时,新的数据会从队列头部开始覆盖旧的数据。因此,循环队列在使用过程中,需要记录队列的头部和尾部指针,以便能够正确地判断队列是空还是满,以及在队列中添加、删除元素时,正确地定位到队列的头部和尾部。 基本实现方法 在Java中…

    Java 2023年5月26日
    00
  • java实现时钟表盘

    下面我将详细讲解Java实现时钟表盘的完整攻略。 环境准备 首先需要确保你的电脑上已经安装了JDK环境,并且配置了相应的环境变量。然后你需要找到适合的Java集成开发环境,例如Eclipse、IntelliJ IDEA等,这里我们以Eclipse为例。 构建项目 打开Eclipse,选择”New” -> “Java Project”。 输入项目名称,点…

    Java 2023年6月1日
    00
  • SpringBoot项目使用mybatis-plus代码生成的实例详解

    下面是关于“SpringBoot项目使用mybatis-plus代码生成的实例详解”的完整攻略: 1. 什么是mybatis-plus代码生成 mybatis-plus代码生成是基于mybatis-plus框架实现的一种自动生成代码的工具。通过提供表名、实体类名等信息,可以自动创建对应的Java类、Mapper接口及其SQL语句等,并且支持控制台输出或直接生…

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

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

    Java 2023年5月5日
    00
  • Java多线程同步工具类CountDownLatch详解

    Java多线程同步工具类CountDownLatch详解 CountDownLatch是Java多线程中的一个同步工具类,它可以让一个或多个线程等待一组事件完成后再执行。 基本使用 CountDownLatch的基本使用场景是:在多个线程执行时,有一个或多个线程需要等待其他线程都完成任务后再继续执行。这时候可以使用CountDownLatch来实现。 在使用…

    Java 2023年5月19日
    00
  • 数组实现Java 自定义Queue队列及应用操作

    数组实现Java 自定义Queue队列及应用操作 队列(Queue)是一种基本数据结构,它在算法和程序设计中得到了广泛应用。队列主要是用来存储和管理一系列元素,并在这些元素中进行插入和删除操作。本篇攻略将详细介绍如何用Java数组来实现自定义队列,并列举相应的应用操作。 Queue定义 队列最基本的功能就是FIFO(先进先出),可在队列尾插入一个元素,也可在…

    Java 2023年5月27日
    00
  • Java Web请求与响应实例详解

    Java Web请求与响应实例详解 概览 Java Web中的Http请求和响应机制是非常重要的一个部分,它允许Web应用程序从客户端浏览器接收请求,并向客户端浏览器发送响应。 在本文中,我们将会对Java Web请求与响应进行详细讲解,首先介绍HttpServletRequest对象和HttpServletResponse对象,然后我们将通过两条完整的示例…

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