当前位置: 首页 > 科技观察

输入参数校验,你还在写If-Else吗?出去!来看看这个

时间:2023-03-19 14:20:22 科技观察

后台服务端接口一拿到前台的输入参数,上去是不是就开始堆if-else,十多行代码后,发现全判断和校验参数都没有尚未进入正常的业务逻辑。功能虽然没什么问题,但是看起来太啰嗦了,被后来者看到难免吐槽!想要更优雅?那就跟着小编一起来学习一下spring-boot-starter-validation的使用方法吧。参数验证!优点控制器层的代码看起来干净整洁。spring-boot-starter-validation本身内置了一些可以直接使用的注解,如@NotNull、@NotBlank、@Size等,支持自定义注解,灵活方便的构建pom和引入依赖包org.springframework.bootspring-boot-starter-validation常用注解@NotNull@NotBlank@NotEmpty@Size自定义注解/***时间属性格式验证*@author:liyajie*@createTime:2022/1/2010:38*@version:1.0*/@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.PARAMETER,ElementType.FIELD})@Constraint(validatedBy=DateValidator.Validator.class)public@interfaceDateValidator{//验证失败返回信息Stringmessage()default"Dateformatisincorrect";//下面两行是固定模板Class[]groups()默认{};类[]有效载荷()默认{};/***预期的日期格式*/String期望值();@Slf4j类验证器实现ConstraintValidator{privateStringexpectValue;@Overridepublicvoidinitialize(DateValidatordateValidator){expectValue=dateValidator.expectValue();}@OverridepublicbooleanisValid(Stringvalue,Constraintcontext){booleanflag=false;/***为空直接通过,只做格式验证*/if(Strings.isNullOrEmpty(value)){returntrue;}try{Datedate=DateUtil.formatStr2Date(value,expectValue);标志=真;}catch(RuntimeExceptione){log.warn("DateValidator日期格式不正确");e.printStackTrace();}返回标志;如果出现异常,程序就会停止执行后面的逻辑,这是不合理的,所以我们需要捕获异常并进行处理。方案如下:全局捕获异常并统一返回:/***全局异常处理*@author:zhanglei*@version:1.0*@date:2021/5/1820:27*/@ControllerAdvice@Slf4jpublicclassGlobalExceptionHandler{/***校试异常*@author:liyajie*@date:2022/1/2013:07*@parame*@returncom.lyj.validates.common.R*@exception:*@update:*@updatePerson:**/@ExceptionHandler(MethodArgumentNotValidException.class)@ResponseBodypublicRexceptionHandler(MethodArgumentNotValidExceptione){日志.error("异常处理器信息:",e);BindingResultbindingResult=e.getBindingResult();StringBuilder构建器=newStringBuilder();对于(FieldErrorfieldError:bindingResult.getFieldErrors()){builder.append(fieldError.getDefaultMessage()).append("!");}log.error("消息:{}",builder.toString());返回新的R("500",builder.toString());}}