2014-10-22 3 views
5

Я использую Дооснащение послать POST запрос к серверу:дооснащения POST с объектом JSON, содержащий параметры

@POST("/login") 
void login(@Body User user ,Callback<User> callback); 

Где мой user объект имеет только email и password поля.

Проверка журналов, я могу видеть, что мои параметры посылаются с этим форматом:

D/Retrofit﹕{"email":"[email protected]","password":"asdfasdf"} 

Что мне нужно сделать, чтобы мои параметры будут отправлены, как это?

{"user" : {"email":"[email protected]","password":"asdfasdf"} } 
+0

Я также хочу создать такой же jsonrequest, используя r etrofit, как показано ниже { "params": {"email": "[email protected]", "password": "ni1234", "firstName": "Nilesh", "lastName": "Aher"}} Можете ли вы дать мне фрагмент кода –

ответ

6

EDIT: Сделать правильный путь, используя пользовательские JsonSerializer:

public class CustomGsonAdapter { 
    public static class UserAdapter implements JsonSerializer<User> { 
     public JsonElement serialize(User user, Type typeOfSrc, 
            JsonSerializationContext context) { 
      Gson gson = new Gson(); 
      JsonElement je = gson.toJsonTree(user); 
      JsonObject jo = new JsonObject(); 
      jo.add("user", je); 
      return jo; 
     } 
    } 
} 

И затем, на ваш API клиента строитель:

public static RestApiClient buildApiService() { 
    Gson gson = new GsonBuilder() 
      .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) 
      .registerTypeAdapter(User.class, new CustomGsonAdapter.UserAdapter()) 
      .create(); 

    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(API_URL) 
      .setConverter(new GsonConverter(gson)) 
      .build(); 
    return restAdapter.create(MudamosApi.class); 
} 
+0

Можете ли вы вставить свой код, где вы действительно делаете логин, Как вы проходите в объекте пользователя? –

+0

Привет @ Noble6. Формат - это последняя строка кода в моем комментарии, но я узнал правильный путь, используя пользовательский конвертер gson. https://square.github.io/retrofit/#restadapter-configuration Но спасибо за просить! –

+0

@KayanAlmeida Я ищу, чтобы сделать то же самое. У вас есть образец кода, как вы это сделали, используя свой собственный конвертер? – tvalent2

1

Самый простой способ решить ваши проблемы создание класса RequestPOJO, например:

Файл User.java:

public class User{ 
    public String email; 
    public String password; 
} 

LoginRequestPojo.java Файл:

public class LoginRequestPojo{ 
    public User user; 

    public LoginRequestPojo(User user){ 
     this.user = user; 
    } 
} 

И в вашей модификации 2 запроса:

@POST("/login") 
void login(@Body LoginRequestPojo requestPojo, Callback<User> callback); 

Наконец, ваше тело запроса:

{"user":{"email":"[email protected]","password":"123123"}}

+0

Я делал это раньше, если вы проверите мой ответ до того, как выпуск был похож на ваш, но это не рекомендуется, так как он создает «класс», который почти ничего не делает. Лучшим подходом является централизация всех связанных с JSON обработок внутри «GsonAdapter» или, возможно, использование Jackson с аннотациями тоже! :) –

+0

Разве вы не создаете класс для решения проблемы в любом случае? Почему более сложный класс для решения одной и той же проблемы лучше подходит? – nasch

Смежные вопросы