我们有一系列springbootsrestapi应用程序,其中2个是编排器,它们的接口向客户机公开。编排器通过连接器与数据库服务或外部api(restapi)交互,这些连接器是使用openapi gradle插件从服务yamls生成的瘦客户端(okhttp)。
这些连接器生成一个通用的apiexception。当抛出异常时,异常的主体被分配给apiexception中的responsebody属性。例如,服务的例外情况是:
{
"traceId":"uuid",
"source":"INNER_SERVICE_1",
"errors":[
{
"errorCode":"NOT_FOUND",
"description":"Resource Not Found"
}]
}
到达调用者一侧的异常如下所示:
代码=500;map<string,list>responseheaders=null;string responsebody={“traceid”:“1234”,“source”:“inner\u service \u 1”,“errors”:[{“errorcode”:>“not\u found”,“description”:“resource not found”}]};
如果一个进程调用2个或多个连接器,我们抛出它并在main函数中捕获它们。尽管这些异常中的每一个都来自不同的包,但我们希望从每个异常中获得相同的信息,即响应体json字符串。在这种情况下,处理这些异常的最佳方法是什么?
选项1:单独捕获并提取responsebody字符串。既然我们知道json看起来像什么,那么就获取正确的数据,创建自己的响应体,然后抛出它。备注:代码重复。
选项2:在一个多批次中捕获它们。然后用多个if条件编写逻辑,如:if(apiexception1的示例)等。。问题:都在一个地方,维修更容易。但代码可能会增长并变得难以管理。
选项3:将处理异常的任务委托给连接器本身,在连接器中编写@exceptionhandler,然后从调用方方法抛出异常备注:更干净的代码,但是从客户端拿走了处理异常的能力。无法向异常添加其他信息。
暂无答案!
目前还没有任何答案,快来回答吧!