入参校验,你还在写 If-Else?Out了!快来看看这个吧

  发布时间:2025-11-04 04:11:07   作者:玩站小弟   我要评论
背景当服务端接口一拿到前台的入参,你是不是上去就开始堆积if-else,十多行代码下去,发现全判断校验参数了,还没进入正常的业务逻辑。虽然功能没啥毛病,但看起来太冗长,被后来者看到,那是免不了一顿吐槽 。

背景

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

spring-boot-starter-validation进行参数校验!

优点

controller层的代码看起来干净整洁spring-boot-starter-validation本身内置了一些注解可以直接使用,比如@NotNull,还写@NotBlank,入参校验@Size等支持自定义注解,还写灵活方便

搭建

pom引入依赖包

org.springframework.boot

spring-boot-starter-validation

</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 [] payload() default {};

/

**

* 预期日期格式

*/

String expectValue();

@Slf4j

class Validator implements ConstraintValidator{

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

@Slf4j

public 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());

}

}
  • Tag:

相关文章

  • 自制电脑文件盒教程(简单实用的DIY文件盒制作方法)

    摘要:在数字化时代,电脑成为我们工作和生活中不可或缺的工具,文件管理也变得越来越重要。为了方便整理和存储文件,自制一个电脑文件盒是个不错的选择。本文将介绍一种简单而实用的DIY文件盒制作...
    2025-11-04
  • 为什么ThreadLocal容易导致内存泄漏?

    本文转载自微信公众号「三不猴子」,作者sanbuhouzi。转载本文请联系三不猴子公众号。为什么ThreadLocal容易导致内存泄漏?ThreadLocal是什么?官方解释为:This class
    2025-11-04
  • Python为什么不支持 i++/i--操作

    你一定想过。然而情况却不理想,python中只能使用类似于 i++/i--等操作。python中的自增操作下面代码几乎是所有程序员在python中进行自增(减)操作的常用方法。>>>
    2025-11-04
  • Python内部是如何实现整数相加不溢出的?

    1、如何表示一个整数要想了解这个,那就需要看 Python 的源代码[1],Python中的整数底层对应的结构体是PyLongObject,它位于 longobject.h[2] 中。逐步展开如下:/
    2025-11-04
  • 免费转换PDF为Word的最佳方法(绝对免费的PDF转Word工具推荐)

    摘要:在日常办公和学习中,我们经常会遇到需要将PDF文件转换成Word文档的情况。然而,许多在线工具或软件都要求用户付费或订阅会员才能享受转换服务,这对于需要频繁转换文件的用户来说可能是...
    2025-11-04
  • 超详细 WKWebView 开发和使用经验

    本文转载自微信公众号「网罗开发」,作者兜里有糖同志。转载本文请联系网罗开发公众号。 根据需求需要将老项目中的 WebView 替换成 WKWebView,期间查阅了不少文
    2025-11-04

最新评论