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);
    }
}

-------------------------知道的越多,不知道的越多------------------------

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
javax.validation.constraints.NotEmpty是一个用于验证字段不为空的约束注解。它可以应用于String、Collection、Map和数组等类型的字段上。被@NotEmpty注解修饰的字段不能为null且不能为空。\[3\]在引用\[2\]中的示例中,@NotEmpty(message = "ID不能为空")应用于List<String>类型的userIds字段,表示该字段不能为null且不能为空。因此,在创建的类对象中,如果userIds字段为null或者为空集合,就会出现"执行报错:No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.Long'. Check configuration for 'id'"的错误提示。\[1\] #### 引用[.reference_title] - *1* [No validator could be found for constraint ‘javax.validation.constraints.NotEmpty‘...报错解决](https://blog.csdn.net/qq_40816795/article/details/127109993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [validation校验包常用校验注解@NotEmpty,@NotBlank,@NotNull等注解](https://blog.csdn.net/Ying_ph/article/details/125908693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [javax.validation.constraints中@NotEmpty,@NotNull,@NotBlank的区别](https://blog.csdn.net/m0_51176516/article/details/117456403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值