Модернизация — знание того, когда сообщение не выполняется

#java #android #asynchronous #response #retrofit2

#java #Android #асинхронный #ответ #доработка2

Вопрос:

Я использую retrofit для @POST нового пользовательского объекта на моем сервере. Имя пользователя — это уникальный ключ в таблице базы данных. Если я выполняю асинхронный вызов с уникальным именем пользователя, запись добавляется в таблицу пользователей. Ответ выполнен успешно.

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

Как я могу уведомить / проверить, что операция прошла успешно? Если вызовы create / update / delete успешно отражаются в базе данных?

конечная точка:

 @POST("user")
Call<User> saveUser(@Body User m);
  

Пример вызова:

 call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {

                try {
                    if(response.isSuccessful()) {

                        Log.i(Constants.LOG, response.raw().toString());
                    }
                } catch (Exception e) {
                    Log.e(Constants.LOG, e.toString());
                }
            }
  

Вывод необработанного ответа во всех сценариях:

 Response{protocol=http/1.1, code=200, message=OK, url=http://myapi.com/user}
  

Комментарии:

1. Каждый раз, когда ваш сервер возвращает код состояния 200?

2. Вы будете получать 200 в качестве кода состояния каждый раз, если вам удастся попасть в веб-службу, несмотря на то, была ли выполнена ваша предполагаемая работа или нет. Я бы посоветовал вам поместить журналы в код вашего сервера и посмотреть, где что-то ломается, обработать ваши исключения и вернуть соответствующий ответ для клиента, чтобы вы потерпели неудачу или нет.

3. Хорошо, но как мне проверить, прошла ли операция успешно? В моем приложении rest я могу вернуть успешное / неудачное сообщение, если я использую postman для проверки своих вызовов. Как я могу вернуть такое сообщение с помощью модернизации?

Ответ №1:

хорошо, я наконец-то узнал, как это решить. В моем rest api мне пришлось вызывать status и отправлять пользовательские code :

 res.status(300).send({ error: 'Something went wrong' });
  

В случае добавления повторяющегося пользователя ответ не выполняется, и я получаю необработанный результат:

 Response{protocol=http/1.1, code=300, message=Internal Server Error, url=http:///myapi.com/user}