Я использую аннотации Android для отправки запросов на сервер. Я создал следующий перехватчик на основе ответа на этот questionАннотации аннотаций Android Ошибка входа в систему перехватчика
public class LoggingInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
//It works after removing these two lines
String responseString = stringOf(response.getBody());
Log.d("RESPONSE", responseString);
return response;
}
public static String stringOf(InputStream inputStream) {
inputStream.mark(Integer.MAX_VALUE);
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder strBuilder = new StringBuilder();
String line;
try {
while ((line = r.readLine()) != null)
strBuilder.append(line);
} catch (IOException ignored) {}
try {
inputStream.reset();
} catch (IOException ignored) {}
return strBuilder.toString();
}
}
Однако это вызывает следующее исключение: org.springframework.http.converter.HttpMessageNotReadableException: не удалось прочитать JSON: Нет содержимого для отображения из-за конец входного текста
Когда я удалить следующие строки из перехватчика:
String responseString = stringOf(response.getBody());
Log.d("RESPONSE", responseString);
Все отлично работает.
Вот мой RestClient интерфейс:
@Rest(rootUrl= "http://107.206.158.62:1337/api/", converters={MappingJackson2HttpMessageConverter.class}, interceptors = { LoggingInterceptor.class })
public interface IRestClient {
@Post("users/register/")
@Accept(MediaType.APPLICATION_JSON)
User register(@Body User user);
}
пользователя Модель:
public class User implements Serializable {
String first_name;
String last_name;
String email;
String password;
public User(){}
public User(String first_name, String last_name, String email, String password) {
this.first_name = first_name;
this.last_name = last_name;
this.email = email;
this.password = password;
}
//Getters and Setters
}
RestClient вызов в моей деятельности
@Click(R.id.bRegister)
@Background
void createAccount() {
User u = restClient.register(new User("Test Fname", "Test Lname", "[email protected]", "testpass"));
Log.d("User last name", u.getLast_name());
}
Сервер производит следующее:
JSON{"first_name":"Test Fname","last_name":"Test Lname","email":"[email protected]"}
я хотел бы иметь возможность войти в тело каждого ответа, а затем возвращают объект ответа. Но, похоже, что чтение InputStream из ответа сначала вызывает некоторые проблемы.
Log.d("RESPONSE", responseString);
приносит правильный ответ сервера, но я бегу в выше исключения, когда MappingJackson2HttpMessageConverter пинки в.
Любая помощь будет принята с благодарностью! Счастливого Нового года! :)
Спасибо! Это помогло мне – eHero