BasicNameValuePair实现了apache http的NameValuePair这个接口,关于接口NameValuePair的定义如下:
public interface NameValuePair {
String getName();
String getValue();
}
可以发现该接口中声明了两个方法,返回值均为String,也就是在利用
new BasicNameValuePair(String1,String2)
进行参数传递时,只能使用String这种类型进行传递,事实上表单提交的get和post只能传递String类型,所以如何传递非String类型的参数,比如boolean,int。
easy,在传递之前将对应的类型预先转成String就行了,为何这样可行呢,关键在于这一行
httpPost.setEntity(new UrlEncodedFormEntity(params));
这里放到http entity里面的类型都是字节类型,HTTP协议与FTP,SMTP类似都是通过plain-text ASCII来进行CS数据通信的(不像TCP使用二进制,有历史原因,也更加节约带宽和方便调试),实际上并不存在什么String,Boolean,Integer数据类型,都是通过将byte进行ASCII编码来实现的,服务器端反序列化成String类型后,通过springMVC的框架进行解析,注意这里也需要区分提交方式,框架可能会选取适当的httpMessageConverter进行解析(这个是服务器关注的事情了)