首页 > 解决方案 > REST api返回404时如何使用readEntity解析json

问题描述

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不接受字符串,所以假设它必须转换回流或类似的?有人做过吗?

标签: restjerseyjersey-2.0

解决方案


如果 ,您可以编写一个Errorresponse.readEntity(Error.class)形成的课程response.statusCode == 404,否则您可以像现在一样继续。 Error也可以是专门用于ConsentNotFoundErroror的抽象类型或接口ParameterNotFoundError。或者它可能是一个具体类型,返回一个像SilverpopErrors.CONSENT_NOT_FOUND.

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


推荐阅读