调用接口 500 servererror_RestTemple调用API接口报错抛出异常无法返回API接口错误信息Message...

最近遇到一个棘手的问题,有个需求需要写一些调用外部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

1f57673a20d28faa2a2384fdbe534510.png

第二步:RestTemple.class

05a14591ac6b5ab1cf81478a45f1fd4d.png

第三步:RestTemple.class

97c86e9534898a5bfe928b73e67020b1.png

第四步:RestTemple.class

258623bc0a7ee122e351b4b9428d88b8.png

第五步:RestTemple.class

eda852288bd73c1eb91ac51828e60f28.png

第六步:ResponseErrorHandler.class</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值