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

本文讲述了在使用SpringBoot的RestTemplate调用API时遇到的异常处理问题。当API调用出错,如参数错误或token无效,SpringBoot的默认行为是直接抛出异常,而未包含API的错误信息。作者通过追踪源代码,发现了不同版本Spring的DefaultResponseErrorHandler类中处理异常的差异。通过升级Spring版本或自定义异常处理器,实现了获取并抛出API接口的错误信息。最后,作者强调了阅读源码和调试在解决问题中的重要性。
摘要由CSDN通过智能技术生成

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

87350573d928998ecb2782ec60fb9956.png

第二步:RestTemple.class

8f39608953d249e4a821ca06942f1582.png

第三步:RestTemple.class

c6ed97fd1bcd8cbffd54f0bc86386f11.png

第四步:RestTemple.class

48d2e75e3912efe9636e1024ba1bd4e0.png

第五步:RestTemple.class

0a3608ca2fd164dea73eed8334397334.png

第六步:Respon

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值