java通過request自動封裝復雜對象

vqfq6057 9年前發布 | 644 次閱讀 Java JFinal

參考:Jfinal源碼,在上面基礎上改的,然后分享出來
適用JAVAEE平臺
</div>

 

[Java]代碼    

/**
     * 實現深層封裝對象的實例 從request封裝對象
     * 舉例:
     * House.class 屬性有三個 ID:id 名稱:name 門類:Door door
       Door類: id name height
         傳遞的參數:house.id=5 & house.name=普通住宅 & door.id=33 & door.name=木門 & door.height=500 就可以自動封裝
     */
    private static final <T> T injectCommonModel(Object model, String modelName, HttpServletRequest request, Class<?> modelClass, boolean skipConvertError) throws Exception{
        Method[] methods = modelClass.getMethods();
        for (Method method : methods) {
            String methodName = method.getName();
            if (methodName.startsWith("set") == false)    // only setter method
                continue;

            Class<?>[] types = method.getParameterTypes();
            if (types.length != 1)                      // only one parameter
                continue;

            if(TypeConverter.judgeBasicType(types[0])){ //判斷是否基本類型
                String attrName = methodName.substring(3);
                String value = request.getParameter(modelName + "." + StrKit.firstCharToLowerCase(attrName));
                if (value != null) {
                    method.invoke(model, TypeConverter.convert(types[0], value));
                }
            }else{
                Object newModel = types[0].newInstance();
                String newModelName = newModel.getClass().getSimpleName();
                newModel = injectCommonModel(newModel, StrKit.firstCharToLowerCase(newModelName), request, newModel.getClass(), skipConvertError);
                if (newModel != null) {
                    method.invoke(model, newModel);
                }
            }
        }
        return (T)model;
    }
 本文由用戶 vqfq6057 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!