如果客户端提交的字符集与其Web Service 服务端接受的字符集不符,那么Web Service服务端必然无法正确的处理本次的请求.返回的结果也可想而知.
通常我们会用Jersey的 MultivaluedMap 去设置访问时的参数;
Client client= Client.create();
WebResource webResource = client.resource("http://localhost:8080/msgp/rest/task");
MultivaluedMap<String,String> params = new MultivaluedMapImpl();
params.add("id","000001");
params.add("name", "王五");
params.add("sex", "男");
webResource.queryParams(params).post(String.class);
这样 如果我请求的工程字符集是 "UTF-8" ,服务端的字符集是GBK, 那么服务端获取到的 name 和sex 的值就会出现乱码,服务端如果是公开的API 那么我们无法对其做任何操作,更改字符集编码只能在我们的客户端上操作,有人一般是在客户端设置上过滤器,这样虽能临时解决,但是并不完美,如果调用多种公开的API ,恰巧服务端的字符集各不相同,设置过滤器就无法根本解决了,但是如果我们在每个调用公开API的代码中分别设置成对应服务端的字符集,所有的问题就迎刃而解了.
Client client= Client.create();
WebResource webResource = client.resource("http://localhost:8080/msgp/rest/task");
MultivaluedMap<String,String> params = new MultivaluedMapImpl();
params.add("id","000001");
params.add("name", URLEncoder.encode("王五", "GBK"));
params.add("sex", URLEncoder.encode("男", "GBK"));
webResource.queryParams(params).post(String.class);
Client client= Client.create();
WebResource webResource = client.resource("http://10.10.15.45:8080/msg/rest/stu");
MultivaluedMap<String,String> params = new MultivaluedMapImpl();
params.add("id","000001");
params.add("name", URLEncoder.encode("柳柳", "ISO-8859-1"));
params.add("sex", URLEncoder.encode("女", "ISO-8859-1"));
webResource.queryParams(params).post(String.class);
Jersey的相关东西太少了,希望能够帮助起点不高的开发者.