request.getParameterMap()使用

request.getAttribute()你們不陌生吧,通產咱們都是經過這個來接收界面傳過來的參數的,可是你有沒想過若是接收參數比較多,比較亂的時候你還用它麼,有沒有其餘更好的方法呢?

本來想本身封裝一個map方法傳值,經過key-value的方式傳參與讀取。

後來發現request自帶了一個相似的方法可使用,對了就是request.getParameterMap(),可是這個方法的話返回類型是Map類型的對象,也就是符合key-value的對應關係,但這裏要注意的是,value的類型是String[],而不是String. 着這裏我就糾結了好久

沒有通過特殊處理的話,你獲得的字符串是這樣的Ljava.lang.String;@1234 java

Ljava.lang.String;@1234 那麼這一串是什麼意思呢?數組

網上搜了下:函數

「([Ljava/lang/String;)V」 它是一種對函數返回值和參數的編碼。這種編碼叫作JNI字段描述符(JavaNative Interface FieldDescriptors)。一個數組int[],就須要表示爲這樣"[I"。若是多個數組double[][][]就須要表示爲這樣 "[[[D"。也就是說每個方括號開始,就表示一個數組維數。多個方框後面,就是數組 的類型。編碼

若是以一個L開頭的描述符,就是類描述符,它後緊跟着類的字符串,而後分號「;」結束。spa

好比"Ljava/lang/String;"就是表示類型String;.net

JNI方法描述符,主要就是在括號裏放置參數,在括號後面放置返回類型,以下:code

(參數描述符)返回類型對象

能夠看不能用多麼糾結啊……你能夠經過重寫toString方法實現可用,不過我以爲仍是經過一個本身寫的map轉換比較方便

代碼以下:ip

Map resMap=transToMAP(request.getParameterMap());


 private Map transToMAP(Map parameterMap){
      // 返回值Map
      Map returnMap = new HashMap();
      Iterator entries = parameterMap.entrySet().iterator();
      Map.Entry entry;
      String name = "";
      String value = "";
      while (entries.hasNext()) {
          entry = (Map.Entry) entries.next();
          name = (String) entry.getKey();
          Object valueObj = entry.getValue();
          if(null == valueObj){
              value = "";
          }else if(valueObj instanceof String[]){
              String[] values = (String[])valueObj;
              for(int i=0;i<values.length;i++){
                  value = values[i] + ",";
              }
              value = value.substring(0, value.length()-1);
          }else{
              value = valueObj.toString();
          }
          returnMap.put(name, value);
      }
      return  returnMap;
  }

你們能夠參考借鑑下,有更好的方法,也但願您不吝賜教。

相關文章
相關標籤/搜索