在文章開頭我還得回想回想我當時從前台接收資料的艱辛曆程,一行行的get
Parameter看這都心裡犯狠,這些沒有任何技術含量的事要做這麼多遍,後來呢我就發現了getParameterMap這個API(有點尴尬),就自己寫了個周遊的工具類,但是故事并不是這麼完美的,因為我要new 一個bean給它指派,然後我就又開始了我的艱辛曆程了(說多了都是淚),我當時就在想有沒有什麼方法讓我從這解放出來呢(當時可不太懂這個怎麼寫),放寒假了就圓圓我當時的夢想吧哈哈畢竟以後用的地方還多着勒。
還是老規矩對它先進行一頓原理分析:
1.先用增強的for把全部的鍵值對周遊出來,注意Value要用數組來裝,因為如果是多選的話一個肯定是不夠的。
2.利用反射拿到bean的所有 方法,和第一步取出來的keyset比對,如果一樣的話就調用set方法
3.如果資料類型是日期類型,要轉化為标準的日期類型,否則會報錯,我的調試如下(這一步不能固定在方法裡,因為日期類型的分隔符不确定)
我開始實作的時候沒注意Date類型的資料導緻出錯
這個是沒有時間類型的,運作結果如下是正确的

這個是有時間類型的,會報錯,那麼怎麼解決呢
然後我加上了時間轉換器,但是還是這個錯誤,然後我仔細觀察了下錯誤,然後發現是我的bean裡的Date導包導錯了,要是util下的Data。下邊就是我成功的圖檔
在這裡插入圖檔描述
實作方式
1.傳入參數obj,可以将bean對象傳進去,利用Date包建立一個時間轉換器再用beannutils下的convertutil注冊,然後調用beanutil的populate方法
public static void populate(Object obj, Map<String, String[]> map) {
try {
// 手動向BeanUtils注冊一個時間類型轉換器
// 建立時間類型的轉換器
DateConverter dt = new DateConverter();
// 設定轉換的格式
dt.setPattern("yyyy-MM-dd");
// 注冊轉換器
ConvertUtils.register(dt, java.util.Date.class);
BeanUtils.populate(obj, map);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
2.傳入bean的類,利用反射擷取到bean對象,利用泛型實作bean的反射對象的傳回,到這不得不說反射是真的強大啊,隻有隐式的和無參的才能用newInstence()
public static<T> T populate(Class<T> clazz, Map<String, String[]> map) {
try {
T obj=clazz.newInstance();
//手動向BeanUtils注冊一個時間類型轉換器
// 1_建立時間類型的轉換器
DateConverter dt = new DateConverter();
// 2_設定轉換的格式
dt.setPattern("yyyy-MM-dd");
// 3_注冊轉換器
ConvertUtils.register(dt, java.util.Date.class);
BeanUtils.populate(obj, map);
return obj;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
恭喜你看到了最後,相信你收獲一定很多吧哈哈,滿滿的幹貨,準備周全才能在開發中有更好的遊戲體驗不是嘛。圓夢了圓夢了哈哈。