最近改接口測試代碼的時候,遇到了個問題報ArrayIndexOutOfBoundsException: 160錯誤java
百度谷歌了半天也沒找到解決辦法,web
at com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(SerializeWriter.java:868)
at com.alibaba.fastjson.serializer.SerializeWriter.writeStringWithDoubleQuote(SerializeWriter.java:602)
at com.alibaba.fastjson.serializer.SerializeWriter.writeString(SerializeWriter.java:1411)
at com.alibaba.fastjson.serializer.StringCodec.write(StringCodec.java:49)
at com.alibaba.fastjson.serializer.StringCodec.write(StringCodec.java:34)
at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:188)
at com.alibaba.fastjson.serializer.ListSerializer.write(ListSerializer.java:87)
at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:188)
at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:369)
at com.alibaba.fastjson.JSON.toJSONString(JSON.java:418)
at com.alibaba.fastjson.JSON.toJSONString(JSON.java:568)json
大概就是超長或者特殊字符測試
加斷點跟蹤了下,30多萬字節的返回數據,難道是超長?spa
徹底沒有頭緒,寫了幾行代碼,單條跟蹤試試吧code
String contentd= "XXXXXXXXXXXXXXX"; JSONObject jsonObject = JSON.parseObject(contenta); System.out.println(jsonObject);
截斷了些數據,測試了下,發現不會報錯,真是超長?orm
再試了幾回,發現原來是有特殊字符!!!傳輸的String中 有不可見字符,相似於空格,但又不是空格,應該就是不可見的特殊字符吧。接口
找到了問題的所在,接下來就是想一想怎麼解決了。源碼
最好的辦法就是fastjson能夠支持特殊字符,做者大概一時半會也不會修改it
本身修改源碼,算了,我還太菜。
其實能夠偷工取消下吧
我只要讓返回數據正常打印出來就行。
contenta=contenta.replace(" "," ");
把特殊字符替換成空格。先解決眼前的問題。
加斷點,跟蹤下程序,replace一下。
這是目前想到的最簡單快捷的方法了。不過也是治標不治本