#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}