Уведомление клиента об исключении - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть сервер приложений на основе Spring MVC, который общался с клиентом через JSON.один из запросов, который может выполнить клиент, - «есть ли ожидающие сообщения?»Для этого клиенты создают объект аутентификации и публикуют его на сервере.В ответ сервер отправляет обратно список ожидающих сообщений: for ex. List<PendingMessage>

Сейчас, если не ожидающие сообщения, я возвращаю ноль.но вопрос в том, как мне уведомить клиента. Если у меня возникла ошибка, например, потеря соединения с БД, неверная аутентификация или любое другое исключение, которым я хочу поделиться с клиентом?

Ответы [ 4 ]

0 голосов
/ 29 декабря 2011

Начните с кодов статуса ответа HTTP.Например, если у вас есть проблемы с подключением к БД, верните 500 Internal Server Error.

Этот подход может не предоставить вашему клиенту всю необходимую ему информацию.Таким образом, кроме того, вы можете предоставить детали в виде JSON в теле ответа.Структурируйте этот JSON как хотите.Если вы хотите, чтобы клиентское приложение переходило по определенному URL-адресу после получения вашего ответа, рассмотрите возможность предоставления этого URL-адреса в ответе.

И последнее замечание: было бы неправильно объединять 200 OK с ошибкой втело ответа.Я видел это сделано раньше, и это раздражает.

0 голосов
/ 28 декабря 2011

Вы можете сделать это чисто, бросая исключения. SpringMVC отображает исключения в стандартные коды состояния http (200, 400, 500 и т. Д.). Как и в любое время, когда вы пишете код на Java, вы можете создавать собственные исключения, соответствующие вашим конкретным потребностям.

0 голосов
/ 28 декабря 2011

Если вы разрабатываете и клиент, и сервер, то вы, вероятно, захотите определить какой-то протокол, который может быть интересным. Вы можете думать о своем веб-сервере как о сервере rpc, который возвращает данные в определенном формате для заданных запросов.

Например, при использовании кодов состояния HTTP в случае успешного ответа могут быть возвращены следующие данные:

{
    status: 200,
    message: "OK",
    data: {
        name: John Doe,
        age: 31
    },
    error: null
}

Запрос, который приводит к ошибке:

{
    status: 400,
    message: "Bad Request",
    data: null,
    error: "Database request timed out"
}

У вас в значительной степени будет блок try catch, перехватывающий любые ожидаемые исключения, которые затем могут быть преобразованы в соответствующий ответ JSON с описанием проблемы, которая затем может быть обработана клиентом.

Если в запросе просто есть ошибка еще до того, как он достигнет сервлета, API, используемый для создания запроса, вероятно, предоставляет какой-либо обратный вызов onError, который затем можно использовать для уведомления клиента об ошибке.

0 голосов
/ 28 декабря 2011

Вы можете перехватывать различные типы исключений, которые может выдавать код. На основании этого вы можете определить свое собственное сообщение и отправить его клиенту. На стороне клиента вы должны просто выполнить getMessage () для исключения. Это должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...