[alibaba/fastjson]求助,在Springmvc 里面调用带有fastjson转换的接口报错。
回答
是不是因为错误的编码输入了?比如网页应该是GB18030的,但被当做UTF8处理了
@wenshao 就是UTF-8,没有错的,因为直接用unit test可以跑通,但是一到springmvc的action里面,只要有中文长度就会返回-1. 如图所示,我的页面都是UTF-8的。 下面是代码调用部分,这和页面编码也有关系吗?
` @ResponseBody @RequestMapping(value = "/test",method = RequestMethod.GET) public ModelAndView test() { ModelAndView modelAndView=new ModelAndView(); Object obj=new Object();
modelAndView.addObject("message",obj);
modelAndView.addObject("title","testPage");
modelAndView.setViewName("test");
String msg = "";
AuthIdentityRequest authRequest = new AuthIdentityRequest();
authRequest.setAppId("cert01");
authRequest.setUserId(2307643);
authRequest.setIdNumber("34324324234234");
authRequest.setRealName("杨力");
authRequest.setBusinessLine("");
authRequest.setIgnoreIdNumberRepeat(false);
authRequest.setOffline(false);
try {
AuthIdentityResponse resp_Identity = AuthServiceManager.doAuthIdentity(authRequest);
if(resp_Identity!=null&&resp_Identity.getResult()==3)
{
}
} catch (Exception ex) {
}
return modelAndView;
}`
@wenshao 你好大神,我已经检查了很多次了,编码都是UTF-8,请问一下这个问题怎么解决,谢啦。
已转相关同学跟进处理 @VictorZeng @kimmking
@wenshao 好的,谢谢!
@yangliweng 根据你提供的代码,客户端应该是向Controller发送了一个GET请求,Controller返回ModelAndView,你应该也配置了FastJsonJsonView对吧,整个过程中只有FastJsonJsonView调用了FastJson的JSON.writeJSONString(..),并没有出现你所说的问题,请提供一些更详细的信息帮助我们解决问题,谢谢。
@yangliweng 你在stack overflow发的代码看起来跟fastjson一点关系没有, 计算字节的那些代码没有上下文不知道是做什么的,我怀疑bug出现在这些计算里。
@kimmking @VictorZeng 所以这才是 我奇怪的地方,因为就只有通过 springmvc的controller去 调用 才 会出现 这种 问题,如果 我把HTTP请求 用 单元测试来写 就没 这个问题。我 先自己 多 试下 吧 ,有 问题再及时反馈
把这两种情况下得到的json保存下来,比较一下是不是一致。
@kimmking 如果是这种情况,该如何解决呢?谢啦。比较起来是一致的,但是chars不一致。 第一种情况(Unit Test)正常返回JSON,通过SPRINGMVC ,未返回JSON,直接服务器500 @wenshao
@kimmking 问题找到了。 公司图片上传不上来,同样的一串中文,编码不同。
贴一下请求的浏览器 request headers 和response headers吧。 还有就是报500的错误,控制台有打印错误信息吗
@neil4dong @kimmking @VictorZeng @wenshao 问题已经解决。 正确代码: new String(request.getRealName().getBytes(),"utf-8") 错误代码: new String(request.getRealName().getBytes("utf-8"),"utf-8") 因为是编码问题,我的系统默认getbytes()读到的是gbk的编码,而非UTF-8编码。 问题Close了吧,谢谢各位。