restTemplate远程调用接口,debug时数据已经都拿到了,可是死活就是在最后返回值的时候报can not cast to JSONObject
饺贼最开始执迷不悔,以为是postman里我的参数格式写错了,一直纠结到底要不要加[ ]。因为他当时报的还有一个syntax error,提醒我改数组符。在这浪费了好一段时间后,我去到封装的参数实体类里看了看JSON的转换格式,这里用的是parseObject
private void assignProperties(String key) {
JSONObject src = JSON.parseObject(String.valueOf(this.get(key)));
src.keySet().forEach((k) -> {
if (null != k && !"".equals(k)) {
this.params.put(k, src.get(k));
switch (k) {
case "pageNo":
this.pageNo = (Integer) src.get(k);
break;
case "pageSize":
this.pageSize = (Integer) src.get(k);
break;
case "sort":
this.sort = (String) src.get(k);
break;
case "order":
this.order = (String) src.get(k);
break;
default:
}
}
});
}
饺贼又研究了一下,以为是他的parse解析力度不够,于是给他加了parseObject后跟了一个JSONObject.class。再测,发现class加上之后,gateway(controller)方面没错,Api(实现代码)这里又出问题了。经过一大截漫无目的踩坑,我猛然发现,这里的JSON转换是转的parseArray、
我试探性的把他改为ParseObject,加上和API层相同的JSONObject.Class,奇迹的发现,居然调通了!
经过一番调试,我把原来多余加的class参数删掉,发现一样还是可以测通。
总结:
于是,经过大半天的踩臭臭,饺贼总结出了一个血淋淋的教训,一定要细心!!!
JSON转入和转出一定要用一样的parse格式,不然。。。