在网上找了几个平台。发现发送短信请求的参数各不相同,肯定还有其他的短信平台第一种:整个信息包含在<END></END>这个标签体中,标签全部大写,包含用户名和密码
  http://www.abc.com:8080/<END><COMMAND>S058</COMMAND><REGISTRYCODE>101100-TEST-3456</REGISTRYCODE><PWD>12</PWD><TIM></TIM><CONTENT>短信内容</CONTENT><SMSID>1</SMSID><MOBILE>13867507888</MOBILE><SMSID>2</SMSID><MOBILE></END>第二种:这种较为普遍 地址后传递对应的参数即可
   http://http.abc.com/tx/?uid=用户账号&pwd=MD5密码&mobile=号码&content=内容第三种: 这种与第二种相同,只是对应的参数名不相同
http://hl.com.cn/sms/push_mt.jsp?cpid=BAIDU&cppwd=123456&phone=13811978407&spnumber=&msgcont=测试&extend=01234
我想问一下各位。这样的通用接口应该如何设计比较好。今后只要在配置文件中配置了地址和用户名与密码就可以正常使用。以上这几种情况对应的字段名各不相同
如账户名分别为REGISTRYCODE、uid、cpid.. 并且第一种与后面的写法也不相同。如何设计才能有良好的复用性呢?

解决方案 »

  1.   

    多写判断吗?我觉得这样写,后续维护很麻烦的,有更好的办法吗?
    String url = "";
    if(选择第一个){
      url = "http://http.abc.com/tx/?uid=用户账号&pwd=MD5密码&mobile=号码&content=内容";
    } else if (选择第二个){
      url = "http://hl.com.cn/sms/push_mt.jsp?cpid=BAIDU&cppwd=123456&phone=13811978407&spnumber=&msgcont=测试&extend=01234";
    } else if (选择第三个) {
      url = "http://www.abc.com:8080/<END><COMMAND>S058</COMMAND><REGISTRYCODE>101100-TEST-3456</REGISTRYCODE><PWD>12</PWD><TIM></TIM><CONTENT>短信内容</CONTENT><SMSID>1</SMSID><MOBILE>13867507888</MOBILE><SMSID>2</SMSID><MOBILE></END>";
    }
    try {
    URL url = new URL(smsUrl);
    connectionData = url.openConnection();
    connectionData.setConnectTimeout(1000);
    BufferedReader bufferedReader = new BufferedReader(
    new InputStreamReader(connectionData.getInputStream(),
    "UTF-8"));
    StringBuilder stringBuilder = new StringBuilder();
    String line = null;
    while ((line = bufferedReader.readLine()) != null)
    stringBuilder.append(line); System.out.println(stringBuilder.toString());

    } catch (MalformedURLException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }