最近遇到一个棘手的问题,有个需求需要写一些调用外部API接口的方法,因为没有SDK,所以我只能手动的去调用,框架采用的是springboot,Java语言编写,但是却出现了当调用异常,包括参数错误,token无效等直接抛出异常400,并没有获取到API接口的异常信息,只有我们自己抛出的异常信息。这样接口的调用方肯定不知道接口调用异常原因。
一、RestTemple实现API调用
我采用的使用springboot的restTemple来去调用接口,具体的实现是先定义一个controller接口,然后再在service层进行逻辑处理。
@Autowired
private RestTemplate restTemplate=new RestTemplate();
//service层代码
public String updateProduct(ProductParam productParam) {
//spliceupdateProductUrl方法是拼接接口参数
String url = spliceupdateProductUrl(productParam,"--此处填写API的接口地址--");
//调用restTemple的get请求方法,直接返回response地址
String response = restTemplate.getForObject(url,String.class);
return response;
}
成功的结果:我们要求都是返回这种格式
{"message":"","code":0,"data":{}}
失败的结果:
{
"timestamp": "2020-05-29T07:44:38.031+0000",
"status": 500,
"error": "Internal Server Error",
"message": "400 Bad Request,
"path": "/updateProduct"
}
直接抛出异常,message是调用接口的异常信息,这里缺少一部分说明,为什么我会知道呢?因为我试过直接在postman上调用API的时候,相同的url和参数,postman是有说明的,如下:
{"message":"111 is an invalid id","code":1000,"data":2014}
二、追踪源代码寻找问题
我首先是通过debug追踪源码的方式去找问题所在:
第一步:RestTemple.class
第二步:RestTemple.class
第三步:RestTemple.class
第四步:RestTemple.class
第五步:RestTemple.class
第六步:Respon