Опубликовать POJO в приложении PHP с помощью Retrofit

Я пытаюсь отправить POJO через запрос POST через Retrofit в приложение PHP, и я хочу, чтобы поля были получены через переменную $ _POST PHP. Это кажется легким, но я не могу заставить его работать.

Мой модифицированный интерфейс:

public interface APIMethods {

@FormUrlEncoded
@POST("/api/api/postUser/")
void postUser(
@Query("auth_token") String auth_token,
@Body User user,
Callback<RESTResponse> callback
);
}

Запрос прошел без ошибок, но $ _POST пусто.

0

Решение

Вам нужно использовать @Field аннотация для установки пары ключ-значение для @FormUrlEncode отправлять.

 @FormUrlEncoded
@POST("/")
void example(@Field("foo") String name, @Field("bar") String occupation);
}

официальные документы

Есть также очень удобный FieldMap

2

Другие решения

Разобрался, основываясь на предложении Victory о FieldMap.

Интерфейс:

public interface APIMethods {

@FormUrlEncoded
@POST("/api/api/postUser/")
void postUser(
@Header("auth_token") String auth_token,
@FieldMap Map<String, String> userFields,
Callback<RESTResponse> callback
);
}

Чтобы преобразовать POJO пользователя в Map<String, String> FieldMap, я использовал ДжексонObjectMapper:

// Get a REST adapter
RestAdapter restAdapter = RestAdapterFactory.getInstance();
// Create API instance
IAPIMethods methods = restAdapter.create(IAPIMethods.class);

// Define callback
Callback<RESTResponse> callback = new Callback<RESTResponse>() {
@Override
public void success(RESTResponse restResponse, Response response) {
String res = restResponse.responseText;
if(restResponse.status != 1){
Toast.makeText(getBaseContext(), "Error: " + res, Toast.LENGTH_LONG).show();
}else{
textView.setText(res);
}

Log.d("Debug", res);

}

@Override
public void failure(RetrofitError error) {
Log.e("RetrofitError", error.toString());
}
};

// Instantiate User object/bean
User user = new User();
// Set user properties
user.username = "...";
...

// Instantiate Jackson's ObjectMapper to convert User POJO to Map<String, String>
ObjectMapper mapper = new ObjectMapper();
Map<String, String> userFields = mapper.convertValue(user, Map.class);
methods.postUser(API_KEY, userFields, callback);

В PHP доступ к данным пользователя осуществляется с помощью $ _POST, а заголовки — с помощью getallheaders ();

1

По вопросам рекламы [email protected]