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日

相关文章

  • 基于Socket类以及ServerSocket类的实例讲解

    前言 Socket和ServerSocket是Java网络编程中最基础的两个类,它们被广泛应用于开发客户端和服务端之间的网络通信。在这个攻略中,我们将详细讲解Socket和ServerSocket类的基础知识,包括它们的概念、使用方法和示例应用。 Socket类 概念 Socket类是Java中的一个基础类,用于客户端和服务端之间的网络通信。客户端Socke…

    Java 2023年6月15日
    00
  • 如何使用eclipse搭建maven多module项目(构建父子项目)

    下面是如何使用Eclipse搭建Maven多module项目(构建父子项目)的详细步骤: 1. 创建Maven父项目 在Eclipse中,选择菜单“File” -> “New” -> “Other”,选择“Maven” -> “Maven Project”,点击“Next”。 在“New Maven Project”向导中,选择“Creat…

    Java 2023年5月20日
    00
  • Java SimpleDateFormat与System类使用示例详解

    Java SimpleDateFormat与System类使用示例详解 SimpleDateFormat类 SimpleDateFormat是Java中用于格式化和解析日期的类,可以将日期转换为指定格式的字符串,也可以将指定格式的字符串转换为日期对象。 格式化日期 以下是一个将日期格式化为指定格式字符串的示例: import java.text.Simple…

    Java 2023年5月20日
    00
  • Spring Boot日志的打印与持久化详细解析

    Spring Boot日志的打印与持久化详细解析 在Spring Boot应用中,日志是开发和调试的重要工具。通过合理的配置,我们可以实现日志的打印和持久化,方便问题的排查和解决。本文将详细介绍Spring Boot日志的打印与持久化,并包含两条示例。 Spring Boot日志的分类 Spring Boot日志分为如下五个级别: TRACE:跟踪级别,最低…

    Java 2023年5月19日
    00
  • JSP中图片的上传与显示方法实例详解

    下面就为大家详细讲解一下“JSP中图片的上传与显示方法实例详解”的完整攻略。 1. 确认上传的文件类型 在上传图片前,我们需要确认上传的文件类型,以防止一些不合法的文件被上传。可以通过以下代码片段实现: String fileName = fileItem.getName(); String extName = fileName.substring(file…

    Java 2023年6月15日
    00
  • feign post参数对象不加@RequestBody的使用说明

    关于“feign post参数对象不加@RequestBody的使用说明”,我将分以下几个方面进行详细讲解: @RequestBody注解的作用 不加@RequestBody的使用说明 示例说明 小结 1. @RequestBody注解的作用 首先,我们需要了解@RequestBody注解的作用。该注解用于将请求体中的参数绑定到方法参数上。即,使用该注解后,…

    Java 2023年5月23日
    00
  • Spring Security 表单登录功能的实现方法

    下面为您讲解Spring Security表单登录功能的实现方法: 1. 配置Spring Security 在pom文件中添加依赖: <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security…

    Java 2023年5月20日
    00
  • java的Hibernate框架报错“TransientObjectException”的原因和解决方法

    当使用Hibernate框架时,可能会遇到“TransientObjectException”错误。这个错误通常是由于以下原因之一引起的: 持久化对象中包含了非持久化对象:如果您的持久化对象中包含了非持久化对象,则可能会出现此错误。在这种情况下,需要确保您的持久化对象中只包含持久化对象。 非持久化对象尝试与持久化对象建立关联:如果您的非持久化对象尝试与持久化…

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