Java将Map拼接成“参数=值&参数=值”:
把一个map的键值对拼接成“参数=值&参数=值”即“username=angusbao&password=123456”这种形式方便传递,尤其是在接口调用的时候,这种方式使用的更加普遍,比如http请求的get方式,如何用java对其进行解决呢?
代码如下:/**
* 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串 * @param params 需要排序并参与字符拼接的参数组 * @return 拼接后字符串 * @throws UnsupportedEncodingException */ public static String createLinkStringByGet(Map<String, String> params) throws UnsupportedEncodingException { List<String> keys = new ArrayList<String>(params.keySet()); Collections.sort(keys); String prestr = ""; for (int i = 0; i < keys.size(); i++) { String key = keys.get(i); String value = params.get(key); value = URLEncoder.encode(value, "UTF-8"); if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符 prestr = prestr + key + "=" + value; } else { prestr = prestr + key + "=" + value + "&"; } } return prestr; } public static void main(String[] args) throws UnsupportedEncodingException { Map<String,String> map= new HashMap<String,String>(); map.put("1", "hello"); map.put("2", "world"); System.out.println(createLinkStringByGet(map)); }
关于项目使用MAP和实体类作为参数的优缺点:
Map:
优点:
1.灵活性强于javabean,易扩展,耦合度低。
2.写起来简单,代码量少。
3.mybatis 查询的返回结果本身就是MAP,可能会比返回javabean快
一点;
缺点:
1.javabean在数据输入编译期就会对一些数据类型进行校验,如果出错会直接提示。而map的数据类型则需要到sql层,才会进行处理判断。
2.map的参数名称如果写错,也是需要到sql层,才能判断出是不是字段写错,不利于调试等。相对而言javabean会在编译期间发现错误
3.map的参数值如果多传、乱传,也是需要到sql层,才能判断出是不是字段写错,不利于调试等。相对而言javabean会在编译期间发现错误
4.仅仅看方法签名,你不清楚Map中所拥有的参数个数、类型、每个参数代表的含义。后期人员去维护,例如需要加一个参数等,如果项目
层次较多,就需要把每一层的代码都了解清楚才能知道传递了哪些参数。
Javabean:
优点:1.面向对象的良好诠释
2.数据结构清晰,便于团队开发 & 后期维护;
3.代码足够健壮,可以排除掉编译期错误。
缺点:
1.代码量增多,大量时间去封装用到的表对象;2.可能会影响开发效率。