REST api返回404

时间:2019-04-25 12:57:59

标签: rest jersey jersey-2.0

Silverpop REST API返回这样的JSON消息:

{
"meta": {
    "attributes": {},
    "generalErrors": ["Consent not found"],
    "fieldErrors": {},
    "links": [],
    "nextPageUrl": null
},
"data": null
}

如果找不到记录,则返回404,带有上述JSON,但带有

  

“ generalErrors”:[“找不到联系人”]

如果URL缺少参数,则返回404,并带有

  

“ generalErrors”:[“找不到参数”]

如果未找到数据库(重大错误),则返回404并带有

  

“ generalErrors”:[“找不到数据库”]

在我的代码中,我试图将响应JSON解析为一个对象,但是问题是,如果响应为404,解析就不会执行。我需要将响应获取到一个对象中,这样我才能解析出错误消息并从那里决定要采取的措施(即找出未找到联系人的情况,这是正常现象还是错误)。代码是这样的:

RestApiResponseDO responseDO = response.readEntity(RestApiResponseDO.class);

如果状态为404,则结果responseDo为空(未设置任何字段)

是否有一种方法可以强制其解析响应,无论状态码是什么?

另一种策略可能是将响应读取为字符串,然后解析该字符串。但是,readEndity不带字符串,因此假设必须将其转换回流或类似字符串吗?一个人做到了吗?

1 个答案:

答案 0 :(得分:1)

您可以编写Error形式的response.readEntity(Error.class)类, 如果为response.statusCode == 404,则按照当前操作进行。 Error也可以是抽象类型或接口,专门用于ConsentNotFoundErrorParameterNotFoundError。或者它可以是返回SilverpopErrors.CONSENT_NOT_FOUND之类的枚举的具体类型。

我想知道为什么“未找到数据库”返回404,4xx指示 客户端做错了什么,但与数据库相关的错误将是5xx。 请求中缺少的URL应该是400错误的请求。