91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在java中對方法參數進行核對

發布時間:2021-04-21 17:21:36 來源:億速云 閱讀:178 作者:Leah 欄目:編程語言

本篇文章為大家展示了怎么在java中對方法參數進行核對,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Java是什么

Java是一門面向對象編程語言,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序。

1.聲明自定義注解類

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequestRequire {
    
    /**
     * 請求當前接口所需要的參數,多個以小寫的逗號隔開
     * @return
     */
    public String require() default "";
    
    /**
    *傳遞參數的對象類型
    */
    public Class<?> parameter() default Object.class;
}

2.對需要做非空判斷的方法做注解配置(一般用在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類是一個參數類,里面包含了賬號模塊的所有參數。

3.編寫切面類

@Aspect
@Component
public class RequestRequireAspect {
 
    Logger log=LoggerFactory.getLogger(RequestRequireAspect.class);
    
 
    public RequestRequireAspect() {
        log.info("初始化接口參數非空判斷切面類...");
    }
    
    @Pointcut("@annotation(com.xxxx.RequestRequire)")
    public void controllerInteceptor() {
    }
 
    @Around("controllerInteceptor()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        
        //獲取注解的方法參數列表
        Object[] args = pjp.getArgs();
        
        //獲取被注解的方法
        MethodInvocationProceedingJoinPoint mjp = (MethodInvocationProceedingJoinPoint) pjp;
        MethodSignature signature = (MethodSignature) mjp.getSignature();
        Method method = signature.getMethod();
        
        //獲取方法上的注解
        RequestRequire require = method.getAnnotation(RequestRequire.class);
        
        //以防萬一,將中文的逗號替換成英文的逗號
        String fieldNames=require.require().replace(",", ",");
        
        //從參數列表中獲取參數對象
        Object parameter=null;
        for(Object pa:args){
            //class相等表示是同一個對象
            if (pa.getClass()==require.parameter() ) {
                parameter=pa;
            }
        }
        
        //通過反射去和指定的屬性值判斷是否非空
        Class cl=parameter.getClass();
        for(String fieldName:fieldNames.split(",")){
            
            //根據屬性名獲取屬性對象
            Field f=cl.getField(fieldName);
            
            //設置可讀寫權限
            f.setAccessible(true);
            
            //獲取參數值,因為我的參數都是String型所以直接強轉
            String value=(String)f.get(parameter);
            
            //非空判斷
            if(!StringUtils.isNotBlank(value)){
                throw RuntimeException("參數:"+fieldName+"不允許為空");
            }
        }
        
        //如果沒有報錯,放行
        return pjp.proceed();
    }
}

4.在springmvc里面配置

<aop:aspectj-autoproxy proxy-target-class="true"/>

上述內容就是怎么在java中對方法參數進行核對,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金华市| 崇仁县| 莲花县| 抚顺市| 玉龙| 舞阳县| 蚌埠市| 华阴市| 塔城市| 阳西县| 高尔夫| 栾川县| 酒泉市| 盖州市| 七台河市| 宁明县| 肃南| 额尔古纳市| 余干县| 万源市| 岚皋县| 达日县| 吉木萨尔县| 汪清县| 阿拉善右旗| 昆山市| 苏州市| 辽宁省| 云林县| 五指山市| 望城县| 南昌县| 治多县| 福泉市| 阳信县| 方山县| 阳春市| 合水县| 拜泉县| 电白县| 体育|