[alibaba/fastjson]求助,在Springmvc 里面调用带有fastjson转换的接口报错。

2025-11-13 78 views

回答

2

是不是因为错误的编码输入了?比如网页应该是GB18030的,但被当做UTF8处理了

5

@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;
}`
8

@wenshao 你好大神,我已经检查了很多次了,编码都是UTF-8,请问一下这个问题怎么解决,谢啦。

8

已转相关同学跟进处理 @VictorZeng @kimmking

6

@wenshao 好的,谢谢!

9

@yangliweng 根据你提供的代码,客户端应该是向Controller发送了一个GET请求,Controller返回ModelAndView,你应该也配置了FastJsonJsonView对吧,整个过程中只有FastJsonJsonView调用了FastJson的JSON.writeJSONString(..),并没有出现你所说的问题,请提供一些更详细的信息帮助我们解决问题,谢谢。

2

@yangliweng 你在stack overflow发的代码看起来跟fastjson一点关系没有, 计算字节的那些代码没有上下文不知道是做什么的,我怀疑bug出现在这些计算里。

7

@kimmking @VictorZeng 所以这才是 我奇怪的地方,因为就只有通过 springmvc的controller去 调用 才 会出现 这种 问题,如果 我把HTTP请求 用 单元测试来写 就没 这个问题。我 先自己 多 试下 吧 ,有 问题再及时反馈

1

把这两种情况下得到的json保存下来,比较一下是不是一致。

9

@kimmking 如果是这种情况,该如何解决呢?谢啦。比较起来是一致的,但是chars不一致。 第一种情况(Unit Test)正常返回JSON,通过SPRINGMVC ,未返回JSON,直接服务器500 @wenshao

8

@kimmking 问题找到了。 公司图片上传不上来,同样的一串中文,编码不同。

5

贴一下请求的浏览器 request headers 和response headers吧。 还有就是报500的错误,控制台有打印错误信息吗

3

@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了吧,谢谢各位。