龙空技术网

入参校验,你还在写if-else?out了!快来看看这个吧

java永无bug 996

前言:

现时小伙伴们对“java怎么跳出if判断”可能比较注重,小伙伴们都需要分析一些“java怎么跳出if判断”的相关文章。那么小编也在网上搜集了一些关于“java怎么跳出if判断””的相关内容,希望同学们能喜欢,看官们快快来了解一下吧!

背景

当服务端接口一拿到前台的入参,你是不是上去就开始堆积if-else,十多行代码下去,发现全判断校验参数了,还没进入正常的业务逻辑。虽然功能没啥毛病,但看起来太冗长,被后来者看到,那是免不了一顿吐槽的!想要优雅一点吗?那就一起随小编一起来学习使用spring-boot-starter-validation进行参数校验!

优点controller层的代码看起来干净整洁spring-boot-starter-validation本身内置了一些注解可以直接使用,比如@NotNull,@NotBlank,@Size等支持自定义注解,灵活方便搭建pom引入依赖包

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-validation</artifactId></dependency>
常用注解
@NotNull@NotBlank@NotEmpty@Size 
自定义注解
/** * 时间属性格式校验 * @author:liyajie * @createTime:2022/1/20 10:38 * @version:1.0 */@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.PARAMETER,ElementType.FIELD})@Constraint(validatedBy = DateValidator.Validator.class)public @interface DateValidator {    // 校验未通过时的返回信息    String message() default "日期格式不正确";    // 以下两行为固定模板    Class<?>[] groups() default {};    Class<? extends Payload>[] payload() default {};    /**     * 预期日期格式     */    String expectValue();    @Slf4j    class Validator implements ConstraintValidator<DateValidator, String> {        private String expectValue;        @Override        public void initialize(DateValidator dateValidator) {            expectValue = dateValidator.expectValue();        }        @Override        public boolean isValid(String value, ConstraintValidatorContext context) {            boolean flag = false;            /**             * 为空直接通过,只做格式验证             */            if(Strings.isNullOrEmpty(value)){                return true;            }            try {                Date date = DateUtil.formatStr2Date(value, expectValue);                flag = true;            }catch (RuntimeException e){                log.warn("DateValidator 日期格式不正确");                e.printStackTrace();            }            return flag;        }    }}
测试注意点

校验不通过时,会直接抛出异常,程序将停止执行下面的逻辑,这样是不合理的,所以我们要捕获异常,并进行处理,方案如下: 全局捕获异常,并统一返回:

/** * 全局异常处理 * @author: zhanglei * @version: 1.0 * @date: 2021/5/18 20:27 */@ControllerAdvice@Slf4jpublic class GlobalExceptionHandler {    /**     * 校验异常     * @author: liyajie     * @date: 2022/1/20 13:07     * @param e     * @return com.lyj.validates.common.R     * @exception:     * @update:     * @updatePerson:     **/    @ExceptionHandler(MethodArgumentNotValidException.class)    @ResponseBody    public R exceptionHandler(MethodArgumentNotValidException e) {        log.error("exceptionHandler info:", e);        BindingResult bindingResult = e.getBindingResult();        StringBuilder builder = new StringBuilder();        for (FieldError fieldError : bindingResult.getFieldErrors()) {            builder.append(fieldError.getDefaultMessage()).append("!");        }        log.error("message : {}",builder.toString());        return new R("500",builder.toString());    }}
结束

如需获取源码,请关注后,私信小编,非常感谢!

标签: #java怎么跳出if判断 #java入参