springboot判空工具_《SpringBoot判空处理》揭开@Valid与@Validated的面纱

本文介绍了在SpringBoot中如何利用@Valid和@Validated进行参数校验,避免手动编写繁琐的非空检查。通过在DTO上使用注解,如@NotEmpty,@NotBlank等进行字段限制,并在Controller中使用@Valid开启注解,当校验失败时,可通过全局异常处理获取错误信息。此外,文章还强调了前后端非空字段的处理策略,以及分享了生活中的趣事和推荐内容。
摘要由CSDN通过智能技术生成

一、事有起因

我们在与前端交互的时候,一般会遇到字段格式校验及非空非null的校验,在没有SpringBoot注解的时候,

我们可能会在service进行处理:

if(null ==name){throw new BizException("-1", "用户名不能用空");

}

要是有20个字段需要插入,那我们岂不需要书写20遍这样的代码,当然这种事最直接的解决方式,但作为程序员,我们

首要的任务是要能完成需求到代码的转化,同时还要不断思考如何更加丝滑的写代码,不要重复造轮子。在进入正题之前我们

先认识以下3位老朋友:

entity

用于抽象数据库中的字段,不断任何处理

dto/vo/bean

作为前端数据与数据库的桥梁,一般我们是一个接口,一个dto,我们的判空也是需要结合dto处理

controller

用于接受前端的请求,我们的判空也是在controller层进行的

就此我们正式的开始探索Valid与Validated的旅程

二、判空逻辑的具体实现

2.1、使用的包及注解

2.2、注解的含义

@Null              被注释的元素必须为 null@NotNull          被注释的元素必须不为null@AssertTrue         被注释的元素必须为true@AssertFalse         被注释的元素必须为false@Min(value)         被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value)         被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value)       被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value)       被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max=, min=)       被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past              被注释的元素必须是一个过去的日期

@Future            被注释的元素必须是一个将来的日期

@Pattern(regex=,flag=)    被注释的元素必须符合指定的正则表达式

Hibernate Validator      提供的校验注解:

@NotBlank(message=)     验证字符串非null,且长度必须大于0

@Email              被注释的元素必须是电子邮箱地址

@Length(min=,max=)       被注释的字符串的大小必须在指定的范围内

@NotEmpty            被注释的字符串的必须非空

@Range(min=,max=,message=)  被注释的元素必须在合适的范围内

2.3、dto上使用具体需要判断的注解

@Data

@EqualsAndHashCode(callSuper= false)

@Accessors(chain= true)public class SiteProjectCreateReq implementsSerializable {private static final long serialVersionUID=1L;

@NotEmpty(message="项目类型不能为空"privateString type;

}

2.4、controller使用@Valid开启注解

public interfaceSiteProjectApi {

//如果是集合或者其他数据结构,则需要在接口或者类上加@Validated@PostMapping(value= "/createProject")

SResponseBean createProject(@RequestBody @Validated SRequestBean> createReqs);

//如果入参是entity,那我们加上@Valid即可,dto中注解就可以生效

@PostMapping(value= "/createProject")

SResponseBean createProject2(@RequestBody@ValidSiteProjectCreateReq createReqs);}

@Datapublic classSRequestBean implementsSerializable {

@Valid   CommonHeaderReq header;@ValidTbody;}

/**

* Validated 加在类或者接口上

* Valid 加在具体的entity或者dto

@validated和@valid都可以用在controller层的参数前面,但这只能在controller层生效。

*/

2.5、当不满足条件时,获取错误信息返回

注意:不同的注解,抛出的异常可能不一样,获取方式也不一样,可以调试加上拦截

@RestControllerAdvice()public classSiteExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)publicObject handleException(HttpServletRequest request, MethodArgumentNotValidException e){

LoggerUtil.error("出现异常======> [{}] ",e);

//此处获取@NotEmpty(message = "项目类型不能为空"),中的message

String message=e.getBindingResult().getAllErrors().stream().findFirst().get().getDefaultMessage();returnSResponseUtil.output("01", message); }

}

2.6、再说一句

一般我们拿到需求,产品经理会根据需求,形成原型。前端设计界面,后台设计数据库。

针对于非空字段,一般需要做以下几点:

1、前端在发往后端的时候会进行一次拦截。

2、后端controller进行拦截一次。

3、生成的swaager文档,需要标明必输。

4、数据库设计,需要设计成非空。

三、偷得浮生一刻闲

3.1、新鲜事

网传阿里P9员工出轨P7已婚女下属🤣

3.2、歌曲推荐

童年,这首歌相信大家都很熟悉,小时候那份童真每每想起,嘴角总会上扬,这首粤语版,不失另一种韵味。

3.3、影视推荐

2001太空漫游 2001: A Space Odyssey (1968),我个人始终相信人类是渺小的,宇宙若只有人类,岂不白白浪费。

保持敬畏,保持探索精神。

推荐理由,标新立异,伟大的科幻片。

3.4、养眼壁纸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值