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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值