发送请求报文使用GBK字符集,服务端使用UTF-8字符集,在controller层方法实现转换

系统来了一个对接别的系统得需求,接入是简单,但是发现使用得字符不一致,导致互相拿到得报文乱码,感觉上也应该好处理,试了一下,由于自己菜,还是花费了些时间。下面是出方法:

@RequestMapping(value="/abc",methed={RequestMethod.POST})

public void testMethod(HttpServletRequest request,HttpServletResponse response){

request.setCharacterEncoding("GBK");//1设置

response.setCharacterEncoding("GBK");//2设置

response.setContentType("application/json;charset=GBK");//3设置

BufferedReadder br =new BufferedReadder(new InputStreamReader(request.getInputStream(),"GBK"));

StringBuilder sb=new StringBuilder();

String inpStr;

while((inpStr=br.readLine())!=null){

sb.append(inpStr);

}

JSONObject json=JSONObject.fromString(new String(sb.toString()));//将全部数据转成json字符串

Iterator it=json.keys();

Map<String,String>map=new HashMap<String,String>();

while(it.hasNext()){

String key=String.valueOf(it.next);

String value;

try{

value=new String(json.get(key).toString.getBytes("GBK"),"UTF-8");

map.put(key,value);//主要是将值的编码格式从gbk转到utf-8(key的没有处理,key如果存在中文的自己按照value的处理方法一样处理了)

}catch(UnsupportedEncodingException e){

e.printStackTrace();

}

}

//此时就已经把请求数据由GBK转成utf-8了,后端的service就可以正常使用,那么service层处理完成之后返回给controller的数据是utf-8,需要转换成gbk返回,由于上面我们做了2设置3设置,所以直接返回就行

//假如service返回的数据是Map<String,String>msg=new HashMap<String,String>();

Map<String,String>msg=new HashMap<String,String>();

response.getWriter().write(JSONObject.fromMap(msg).toString());//将map转换位字符串写出

}

参考须知:JSONObject是自己的工具类作用应该都看的出来,使用的报文是格式application/json,自己的修改为对应的就行,关闭流的代码我没写,写不动了,自己家一下,还有如果由语法小错误,自己改下,我在内网测试了,代码拿不出来,手敲的,可能敲错,理解。

另外如果用postman测试,可以在Headers里面添加key为Accpet,value为application/json;charset=GBK,发送的就是GBK格式报文了

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值