Json 相同的REST端点返回不同的错误响应对象

Json 相同的REST端点返回不同的错误响应对象,json,rest,design-patterns,spring-boot,response,Json,Rest,Design Patterns,Spring Boot,Response,我的客户端应用程序使用REST端点生成JSON响应,该响应可以返回针对不同场景具有不同结构的错误响应 { "errors": null, "results": [{ "key": "value" }] } 错误1 { "errorCode" : "XXXX" "errorMessage" : "Validation Failed" }//Note the lack of higher order key here; it's flat

我的客户端应用程序使用REST端点生成JSON响应,该响应可以返回针对不同场景具有不同结构的错误响应

{
    "errors": null,
    "results": [{
        "key": "value"
    }]
}
错误1

{ 
    "errorCode" : "XXXX"
    "errorMessage" : "Validation Failed"
}//Note the lack of higher order key here; it's flat
错误2

{
  "apiError" : {
    "errorCode" : "XXXX"
    "errorMessage" : "Validation Failed"
  }
}//Note "apiError" is an object 
{
  "apiError" : [{
    "errorCode" : "XXXX"
    "errorMessage" : "Validation Failed"
  }]
}//Note "apiError" is a Collection 
错误3

{
  "apiError" : {
    "errorCode" : "XXXX"
    "errorMessage" : "Validation Failed"
  }
}//Note "apiError" is an object 
{
  "apiError" : [{
    "errorCode" : "XXXX"
    "errorMessage" : "Validation Failed"
  }]
}//Note "apiError" is a Collection 
如上所述,很少有错误响应具有相同的键,但返回类型不同

“errorCode”嵌入在不同的键中,也不会与JSON响应全局显示在同一级别

我有点不知道如何处理这个场景?是否有任何设计模式或相关工作


请提供一些指导。

在设计restful API时,您需要使用http状态代码。这方面有相关资料

答复样本如下

成功场景(一个或多个场景)

错误场景

{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    }],
    "results": null
}
{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    },{
        "code": "ERR-403",
        "message": "Error2 text"
    }],
    "results": null
}
多错误场景

{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    }],
    "results": null
}
{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    },{
        "code": "ERR-403",
        "message": "Error2 text"
    }],
    "results": null
}

设计restful API时,需要使用http状态代码。这方面有相关资料

答复样本如下

成功场景(一个或多个场景)

错误场景

{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    }],
    "results": null
}
{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    },{
        "code": "ERR-403",
        "message": "Error2 text"
    }],
    "results": null
}
多错误场景

{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    }],
    "results": null
}
{
    "errors": [{
        "code": "ERR-500",
        "message": "Error text"
    },{
        "code": "ERR-403",
        "message": "Error2 text"
    }],
    "results": null
}

没有“标准”的方法来处理这个问题,但是通常在这个场景中,您应该阅读API的文档

一个好的API可能对每种类型的错误都使用相同的json格式,但是如果他们不这样做,他们至少应该记录它。一个好的API可能也会对每种类型的错误使用不同的媒体类型(因此您可以检查内容类型以了解如何解析错误消息)


当发出每种类型的错误时,可能是API文档。但是,如果这些都不能指导您以一种更好的方式处理这些类型的错误,那么您可能只需要查看响应体,并根据提供给您的内容决定如何解析它。

没有“标准”方法来处理这一问题,但通常在这种情况下,您应该阅读API的文档

一个好的API可能对每种类型的错误都使用相同的json格式,但是如果他们不这样做,他们至少应该记录它。一个好的API可能也会对每种类型的错误使用不同的媒体类型(因此您可以检查内容类型以了解如何解析错误消息)


当发出每种类型的错误时,可能是API文档。但是,如果这些都不能指导您找到一种更好的方法来处理这些类型的错误,那么您可能只需要查看响应主体,并根据提供给您的内容决定如何解析它。

对于相同的请求负载?@Amit Kumar Ghosh-是。。。所有情况下的请求结构都是相同的……@div您是否使用
restemplate
来消耗这些资源?实际上,您的客户将更加困难,因为他们必须关闭Error1中显示的
errorCode
,以及其他错误类型中显示的
apierro
。您需要的是一个单键,它返回类型为
apierro
My Application is Client Application(我的应用程序是客户端应用程序)的对象数组。。。是消费者,不是生产者。对于相同的请求负载?@Amit Kumar Ghosh-是的。。。所有情况下的请求结构都是相同的……@div您是否使用
restemplate
来消耗这些资源?实际上,您的客户将更加困难,因为他们必须关闭Error1中显示的
errorCode
,以及其他错误类型中显示的
apierro
。您需要的是一个单键,它返回类型为
apierro
My Application is Client Application(我的应用程序是客户端应用程序)的对象数组。。。是消费者,不是生产者。问题提到我的应用程序是消费者而不是生产者。问题提到我的应用程序是消费者而不是生产者。