Cxf发布restful传递到客户端部分汉字乱码的解决

近期,公司要通过一台中间服务器,把内网的ERP数据导入到外网中来,由于内外网物理隔断,外网无法直接访问内网的数据,而且站在安全的角度上没有一个公司会这么做。老大把这个任务交给了我,正好前一阶段刚刚学习了Cxf WebService,决定采用cxf发布rustful方式现来实它。老大提出了几点需求:1、采用动态数据源,也就是说,我有5个数据源,根据需要访问;2、外网服务器通过中间服务器获取内网ERP的数据,要使用xml格式;3、采用验证令牌;牵扯到公司机密问题,我就不传源代码了,如果有相同的情况要找我讨论,请加我QQ:361202421,不过很少时间上,或者写在评论上,我们一起讨论!

我在使用客户端读取数据时,有部分汉字显示乱码,而且不一定是哪个汉字,我是这么写的main方法

public static void main(String[] args) throws Exception {

URLConnection conn = new URL("http://服务器IP:8080/WebServTKServer/ws/v1/fhmlist").openConnection();

/**

* 这里做一个说明

* http://服务器IP:8080/WebServTKServer/ws/v1/fhmlist

* WebServTKServer-工程名

* v1-版本

* 在applicationContext.xml中定义的<jaxrs:server id="restService" address="/v1">

* PersonService.java中public Person getPerson方法中的@Path("/fhmlist")路径

*/

HttpURLConnection htconn = (HttpURLConnection)conn;


htconn.setRequestMethod("GET");

htconn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

htconn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

htconn.setRequestProperty("begintime", "2015-06-02 00:00:01");//参数begintime

htconn.setRequestProperty("endtime", "2015-06-04 23:59:59");//参数endtime

htconn.setRequestProperty("condition", "1");//参数condition

htconn.setRequestProperty("dsName", "dsSHERP");//数据源参数dsName

htconn.setRequestProperty("token", "xx56Rdeeerrwoo9O/P6R98m");//加密令牌



// 建立实际的连接

htconn.connect();

          // 获取所有响应头字段
          //Map<String, List<String>> map = htconn.getHeaderFields();
          // 遍历所有的响应头字段
          /**
          for (String key : map.keySet()) {
              System.out.println(key + "--->" + map.get(key));
          }*/


int code = htconn.getResponseCode();

//System.out.println("code=="+code);


if (code == 200) {

InputStream is = htconn.getInputStream();

int len = 0;

byte[] b = new byte[1024];

StringBuffer sb = new StringBuffer();


while ((len = is.read(b)) != -1) {

String s = new String(b,0,len,"UTF-8");

sb.append(s);

}


//System.out.println("aaa=="+sb.toString());

System.out.println("数据发送成功!");

br.close();

} else {

System.out.println("数据发送失败!");

}

htconn.disconnect();

}

导出的汉字有时候会显示??,我将红色的部分改成下面的就行了


BufferedReader br = new BufferedReader(new InputStreamReader(htconn.getInputStream(),"UTF-8"));

String line = "";
StringBuffer sb = new StringBuffer();
while (null != (line = br.readLine())) {

sb.append(line);

}


参考文档:http://blog.csdn.net/sulanyan29/article/details/7355960

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值