2015-06-01 3 views
0

Есть ли простой способ в Retrofit конвертировать пройденный объект в JSON?Преобразование POJO в JSON Retrofit в Android

Это мой дооснащения интерфейс:

@FormUrlEncoded 
@POST("/places/name") 
void getPlacesByName(@Field("name") String name, 
        @Field("city") String city, 
        @Field("tags") Tags tags, 
        Callback<PlaceResponse> callback); 

Сначала я подумал, что если я прохожу Tags объект будет автоматически преобразован в JSON, но на самом деле запрос выглядит следующим образом: name=pubs&city=London&tags=com.app.database.model.Tags%4052aa38a8

ли есть ли простой способ конвертировать POJO в JSON в Retrofit?

+1

Посмотрите на этот ответ http://stackoverflow.com/questions/21398598/how-to-post-raw-whole-json-in-the-body-of-a-retrofit-request. Вам нужно определить параметр @Body и передать его POJO. –

+0

Я пробовал это, но если я использую '@ Body', я получу эту ошибку' @Body параметры не могут использоваться с формой или многочастной кодировкой' –

+0

Если вы используете @Body, вы должны удалить аннотацию FormUrlEncoded. Дооснащение сделает отдых. –

ответ

1

Используйте Джексон, чтобы преобразовать его непосредственно в строку:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); 
String json = ow.writeValueAsString(object); 

Или используйте Gson: http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

+0

Да, к сожалению, это не может быть упрощено –

1

Вы создаете URL с параметрами, потому что вы используете @URLEncoded и передаем параметры, как @Field ,

Вот решение:

@POST("/places/name") 
void getPlacesByName(@Body RequestObject req, Callback<PlaceResponse> callback); 

Additionaly, я бы посоветовал на использовании @GET для извлечения объектов. @POST используется для создания объекта и @PUT для обновления. Хотя это не так, это как рекомендация, чтобы соответствовать RESTful.

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