日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优雅参数判空_java 方法参数怎么优雅校验?

發(fā)布時(shí)間:2025/4/16 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优雅参数判空_java 方法参数怎么优雅校验? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

不邀自來。這個(gè)問題,我之前也考慮過,包括異常處理,都是很繁瑣的,不是核心的業(yè)務(wù)邏輯,但是充斥在代碼的各個(gè)角落,很繁瑣。

我的解決方案,是通過aop+注解的方式,無侵入式的解決。

1.第一步聲明自定義注解類

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface RequestRequire {

/**

* 請(qǐng)求當(dāng)前接口所需要的參數(shù),多個(gè)以小寫的逗號(hào)隔開

* @return

*/

public String require() default "";

/**

*傳遞參數(shù)的對(duì)象類型

*/

public Class> parameter() default Object.class;

}

2.對(duì)需要做非空判斷的方法做注解配置(我一般用在controller)

@RequestMapping(value = "/register", method = RequestMethod.POST)

@RequestRequire(require="mobile,sessionToken",parameter=AccountRequestParameter.class)

public void register(HttpServletRequest request,

HttpServletResponse response,HttpRequestParameter parameter)throws Exception{

//核心代碼

}

AccountRequestParameter類是一個(gè)參數(shù)類,里面包含了賬號(hào)模塊的所有參數(shù)。

3.編寫切面類

@Aspect

@Component

public class RequestRequireAspect {

Logger log=LoggerFactory.getLogger(RequestRequireAspect.class);

public RequestRequireAspect() {

log.info("初始化接口參數(shù)非空判斷切面類...");

}

@Pointcut("@annotation(com.xxxx.RequestRequire)")

public void controllerInteceptor() {

}

@Around("controllerInteceptor()")

public Object around(ProceedingJoinPoint pjp) throws Throwable {

//獲取注解的方法參數(shù)列表

Object[] args = pjp.getArgs();

//獲取被注解的方法

MethodInvocationProceedingJoinPoint mjp = (MethodInvocationProceedingJoinPoint) pjp;

MethodSignature signature = (MethodSignature) mjp.getSignature();

Method method = signature.getMethod();

//獲取方法上的注解

RequestRequire require = method.getAnnotation(RequestRequire.class);

//以防萬一,將中文的逗號(hào)替換成英文的逗號(hào)

String fieldNames=require.require().replace(",", ",");

//從參數(shù)列表中獲取參數(shù)對(duì)象

Object parameter=null;

for(Object pa:args){

//class相等表示是同一個(gè)對(duì)象

if (pa.getClass()==require.parameter() ) {

parameter=pa;

}

}

//通過反射去和指定的屬性值判斷是否非空

Class cl=parameter.getClass();

for(String fieldName:fieldNames.split(",")){

//根據(jù)屬性名獲取屬性對(duì)象

Field f=cl.getField(fieldName);

//設(shè)置可讀寫權(quán)限

f.setAccessible(true);

//獲取參數(shù)值,因?yàn)槲业膮?shù)都是String型所以直接強(qiáng)轉(zhuǎn)

String value=(String)f.get(parameter);

//非空判斷

if(!StringUtils.isNotBlank(value)){

throw RuntimeException("參數(shù):"+fieldName+"不允許為空");

}

}

//如果沒有報(bào)錯(cuò),放行

return pjp.proceed();

}

}

最后在springmvc里面配置

5.最后,你那個(gè)方法需要做非空判斷,你就愉快的加上注解吧,不想就把注解移除,非侵入式,可插拔,封裝好了,以后項(xiàng)目都可以直接拿來用。

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的优雅参数判空_java 方法参数怎么优雅校验?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。