最近在工作中整合友盟消息推送服務時,遇到了用 Ajax 向 Java 後臺傳遞自定義參數的需求,當時想要採取 java.util.Map ,但發現 Ajax 無法傳遞 java.util.Map 類型的參數,後來無奈採取的方式的是採用了這樣的 Vo 對象:
public ExtraVo { private List<String> keys; private List<String> values; //省略 get | set 方法 }
取值時:
if(extraVo.getKeys() != null) { for(int i = 0; i < extraVo.getKeys.size(); i++) { broadcast.setExtraField(extraVo.getKeys().get(i), extraVo.getValues().get(i)); } }
雖然解決了問題,但是確實呆萌,後來轉念一想才發現腦子懵了,爲什麼不用 List<SomeVo> 這種形式呢?而 org.apache.commons.httpclient.NameValuePair 正是實現 key-value 的一種類(當然這個類很簡單,如果不想引入額外 jar 包完全可以自己去實現),改造後的 Vo 對象:
public ExtraVo { private List<NameValuePair> customParams; //省略 get | set 方法 }
取值時:
if(extraVo.getCustomParams() != null) { for(int i = 0; i < extraVo.getCustomParams().size(); i++ ) { broadcast.setExtraField(extraVo.getCustomParams().get(i).getName(),extraVo.getCustomParams().get(i).getValue()); } }
這樣就簡單的實現了前後臺傳遞 Map 類型的參數。
完。