需要解决的问题
需求
前端访问/first/path/parm?parm1=parm1&parm2=parm2
,后台查询结果,返回String
字符串。
但是,重点来了,/first/path/parm
并不能查询数据库,需要把请求发送给/second/path/parm
查询,得到结果才能再丢给浏览器。
解决步骤
- 前端访问
/first/path/parm?parm1=parm1&parm2=parm2
- 解析得到
parm1
和parm2
,转发到/second/path/parm?parm1=parm1&parm2=parm2
- 将
SearchResultModel
转成String
发送给/first/path/parm
-
/first/path/parm
将结果转换为JSON
处理之后,再转换成字符串返回给前端
解决步骤
-
/first/path/parm
写好了,可以得到参数,并发送给/second/path/parm
,可以将字符串解析成对象,再将对象转换为字符串 -
/second/path/parm
写好了,可以将查询结果转换为字符串,并发送给/first/path/parm
- 对接出现问题了,
/first/path/parm
居然不能解析/second/path/parm
生成的JSON
字符串。
问题具体化及解决方案
用到的工具
JSON
解析库:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
/second/path/parm
返回结果代码:
SearchResultResponse res = elasticSearchDao.searchByContent(content, isvId, pageId, size, status);
response = JSON.toJSONString(res);
return response;
response
内容如下:
{"results"["24400576","25235505","58394962","26742017","25789087","26938194","19395051","76716273","20142157","29667266"],"total":103}
/first/path/parm
解析该字符串的代码:
String result = searchService.search(isvid, key, curPage, pageSize, status);
JSONObject map = JSON.parseObject(result);//这句总是报错
报错信息:
java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject
查看content
:
"{\"total\":0,\"results\":[]}"
将此content
单独运行是正确的:
public class Hello {
public static void main(String[] args) {
String s = "{\"total\":0,\"results\":[]}";
JSONObject json = JSON.parseObject(s);
System.out.println(JSON.toJSONString(json));
}
}
结果:
{"total":0,"results":[]}
接着调了很长时间代码...
两个小时之后出现了这个解决方案:
result = result.substring(1, result.length()-1).replaceAll("\\\\", "");