最近在工作中整合友盟消息推送服务时,遇到了用 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 类型的参数。

完。