解决 Jersey 客户端提交中文参数乱码

来源:互联网 发布:稀疏矩阵聚类 编辑:程序博客网 时间:2024/04/30 02:06

如果客户端提交的字符集与其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的相关东西太少了,希望能够帮助起点不高的开发者.