Как проанализировать JSON с readEntity, когда REST API возвращает 404 - PullRequest
0 голосов
/ 25 апреля 2019

API REST Silverpop возвращает сообщение 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 Ответ

1 голос
/ 26 апреля 2019

Вы можете написать Error класс, который вы response.readEntity(Error.class) формируете, если response.statusCode == 404, иначе вы продолжите, как в настоящее время.Error также может быть абстрактным типом или интерфейсом, который специализируется на ConsentNotFoundError или ParameterNotFoundError.Или это может быть конкретный тип, возвращающий перечисление, например SilverpopErrors.CONSENT_NOT_FOUND.

Мне интересно, почему «База данных не найдена» возвращает 404, 4xx, сигнализирующие, что клиент сделал что-то не так, но ошибка, связанная с базой данныхбудет 5xx.Отсутствующий URL в запросе должен быть 400 Bad Request.

...