优雅参数判空_java 方法参数怎么优雅校验?
不邀自來。這個(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 米兔点读笔点读包_小米米兔点读笔评测:养
- 下一篇: css a 标签上下间距_CSS实用技能