使用javax.validation.constraints对请求体进行统一校验

 更新时间:2024年07月04日 08:54:05   作者:半山惊竹  
这篇文章主要介绍了使用javax.validation.constraints对请求体进行统一校验方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、序言

在处理请求的时候,通常需要对参数进行校验是否为空,参数的长度等进行校验,

如果在controller层一个一个的写校验就很麻烦,于是就有了javax.validation.constraints包。

二、注解类型

不同的注解用于不同的数据类型,小伙伴们可以下载源码看一些常用的比如非空限制的注解的区别,

我这里截几个图:

所以我一般的处理是,如果是字符串类型就用@NotBlank,

如果是集合数组之类就用@NotEmpty,如果是对象就用@NotNull

当然还有别的包的校验类型,比如限制请求参数的长度就可以用到另外一个包里的注解了,在pom中增加依赖:

<dependency>
	<groupId>org.hibernate.validator</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>6.0.17.Final</version>
	<scope>compile</scope>
</dependency>

三、使用注解

3.1 请求实体类增加注解

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;


/**
 * @author FanHuiFang
 * @version 1.0
 * @date 2024年04月27日 19:58
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserSaveReq {
    @NotBlank(message = "name不能为空")
    private String name;

    @NotNull(message = "年龄不能为空")
    private Long age;

    @NotEmpty(message = "朋友列表不能为空")
    private List<String> friends;

    @NotNull(message = "客户手机号不能为空")
    @Length(min = 8, max = 16, message = "客户手机号不合法")
    private String userPhone;
}

3.2 控制层

import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import org.springframework.validation.Errors;

@PostMapping(value = "/saveUser")
public ResultBean<String> saveUser(@Valid @RequestBody UserSaveReq req, Errors errors) {
    if (Objects.isNull(req)) return ResultBean.fail("缺少必要的请求参数");
    if (errors.hasErrors() && Objects.nonNull(errors.getFieldError())) {
        String errorMessage = errors.getFieldError().getDefaultMessage();
        log.error("保存用户信息时请求参数错误:{}", errorMessage);
        return ResultBean.fail(errorMessage);
    }
    //保存处理......
    
}

当进行请求的时候,如果缺少某个参数,或者比如长度不对,就会返回异常信息,这样就不用一个个的进行校验了。

注意:这里请求参数中需要加上@Valid注解,如果不加,应该是校验没有生效的

比如手机号号长度不对,就会返回

{
    "code": 0,
    "message": "客户手机号不合法",
    "data": null
}

这里也附带一下我用的ResultBean,以免看的云里雾里的:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;

/**
 * @author FanHuiFang
 * @version 1.0
 * @date 2024年04月27日 21:50
 */

@Builder
@Data
@AllArgsConstructor
@ToString
public class ResultBean<T> implements Serializable {
    private Integer code;
    private String message;
    private T data;


    public ResultBean(int code, String message, T data) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    public ResultBean(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public static <T> ResultBean<T> data(T data) {
        return data("操作成功", data);
    }

    public static <T> ResultBean<T> data(String message, T data) {
        return data(1, message, data);
    }

    public static <T> ResultBean<T> data(int code, String message, T data) {
        return new ResultBean<>(code, message, data);
    }


    public static <T> ResultBean<T> fail(String message, T data) {
        return new ResultBean<>(0, message, data);
    }

    public static <T> ResultBean<T> fail(Integer code, String message) {
        return new ResultBean<>(code, message);
    }

    public static <T> ResultBean<T> fail(String message) {
        return new ResultBean<>(0, message, null);
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java注解与反射原理说明

    Java注解与反射原理说明

    今天小编就为大家分享一篇关于Java注解与反射原理说明,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Mybatis分页PageHelper插件代码实例

    Mybatis分页PageHelper插件代码实例

    这篇文章主要介绍了Mybatis分页PageHelper插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 在SpringBoot启动时执行特定代码的常见方法小结

    在SpringBoot启动时执行特定代码的常见方法小结

    本文总结了SpringBoot启动时执行代码的5种方法,涵盖@PostConstruct、CommandLineRunner、ApplicationRunner、ApplicationListener及@EventListener,各方法适用于不同场景,需要的朋友可以参考下
    2025-08-08
  • SpringBoot使用Validation校验参数的详细过程

    SpringBoot使用Validation校验参数的详细过程

    这篇文章主要介绍了SpringBoot使用Validation校验参数,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Spring定时任务之fixedRateString的实现示例

    Spring定时任务之fixedRateString的实现示例

    本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • Java 中 AQS 的几大经典实现示例详解

    Java 中 AQS 的几大经典实现示例详解

    AQS是Java并发包中的一个核心基础类,用于构建高效、可扩展的锁和同步器,以下是Java中常见的基于AQS的实现类,每个实现都针对特定场景提供了同步功能,我会逐一介绍它们的主要用途、特点,并提供一个简单的代码示例,感兴趣的朋友一起看看吧
    2025-09-09
  • 详解Java中的JDK、JRE、JVM

    详解Java中的JDK、JRE、JVM

    本文主要介绍了Java中的JDK、JRE、JVM的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 浅谈基于SpringBoot实现一个简单的权限控制注解

    浅谈基于SpringBoot实现一个简单的权限控制注解

    这篇文章主要介绍了基于SpringBoot实现一个简单的权限控制注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Linux 下通过 java 命令启动 jar 包常见方式小结

    Linux 下通过 java 命令启动 jar 包常见方式小结

    这篇文章主要介绍了Linux 下通过 java 命令启动 jar 包常见方式小结,后台启动jar包命令大致有五种,每种方式结合代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2023-12-12
  • springboot访问404问题的解决办法

    springboot访问404问题的解决办法

    工作中遇到url404问题,解决问题的进程比较崎岖,写篇文章记录,下面这篇文章主要给大家介绍了关于springboot访问404问题的解决办法,文中通过图文介绍的非常详细,要的朋友可以参考下
    2023-03-03

最新评论