Ответ 1
По умолчанию вам не нужно устанавливать какие-либо заголовки, если вы хотите получить тело запроса JSON. Всякий раз, когда вы проверяете код Retrofit, я рекомендую установить .setLogLevel(RestAdapter.LogLevel.FULL)
в свой экземпляр RestAdapter. Это покажет вам полные заголовки запросов и тело, а также полные заголовки ответов и тело.
Что происходит, так это то, что вы дважды задаете тип содержимого. Затем вы передаете JSONObject, который проходит через GsonConverter и выглядит как {"nameValuePairs":YOURJSONSTRING}
, где YOURJSONSTRING
содержит ваш полный, предназначенный для JSON вывод. По очевидным причинам это не будет работать с большинством API REST.
Вам следует пропустить messing с заголовком Content-type, который по умолчанию уже установлен в JSON с UTF-8. Кроме того, не передавайте JSONObject в GSON. Передайте объект Java для преобразования GSON.
Попробуйте, если вы используете обратные вызовы:
@POST("/api/v1/user/controller")
void registerController(
@Body MyBundleObject registrationBundle,
@Header("x-company-device-token") String companyDeviceToken,
@Header("x-company-device-guid") String companyDeviceGuid,
Callback<ResponseObject> cb);
Я не тестировал этот точный синтаксис.
Синхронный пример:
@POST("/api/v1/user/controller")
ResponseObject registerController(
@Body MyBundleObject registrationBundle,
@Header("x-company-device-token") String companyDeviceToken,
@Header("x-company-device-guid") String companyDeviceGuid);