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
不带字符串,因此假设必须将其转换回流或类似字符串吗?一个人做到了吗?
答案 0 :(得分:1)
您可以编写Error
形式的response.readEntity(Error.class)
类,
如果为response.statusCode == 404
,则按照当前操作进行。
Error
也可以是抽象类型或接口,专门用于ConsentNotFoundError
或ParameterNotFoundError
。或者它可以是返回SilverpopErrors.CONSENT_NOT_FOUND
之类的枚举的具体类型。
我想知道为什么“未找到数据库”返回404
,4xx指示
客户端做错了什么,但与数据库相关的错误将是5xx。
请求中缺少的URL应该是400
错误的请求。