Android Retrofit | Создать пользовательский объект (отправить json на сервер)
Мне было интересно, как я могу отправить пользовательский объект в свой API с помощью модификации, что-то вроде этого:
@POST(URL_ORDERS)
public void newOrder(Order order, Callback<Boolean> success);
Вот как я буду разбирать его на своем сервере
public function store()
{
if(Auth::check()){
$order = Input::get();
$table = $order->table;
$items = $order->items;
if(!$table->taken){
$table->taken = true;
$order->push();
$table->push();
return true;
}
}
return false;
}
По какой-то причине я получаю
06-04 20:45:59.275 6085-6306/com.tesis.restapp.restapp W/dalvikvm﹕ threadid=11: thread exiting with uncaught exception (group=0x40aae210)
06-04 20:45:59.285 6085-6306/com.tesis.restapp.restapp E/AndroidRuntime﹕ FATAL EXCEPTION: Retrofit-Idle
java.lang.IllegalArgumentException: RestAppApiInterface.newOrder: No Retrofit annotation found. (parameter #1)
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:120)
at retrofit.RestMethodInfo.parameterError(RestMethodInfo.java:124)
at retrofit.RestMethodInfo.parseParameters(RestMethodInfo.java:443)
at retrofit.RestMethodInfo.init(RestMethodInfo.java:131)
Я предполагаю, что я хочу, чтобы это каким-то образом превратило мой объект в json и отправил его на мой сервер. Правильно ли я подошел к этому?
Ответы
Ответ 1
Ошибка заключается в том, что вы не добавили аннотацию @Body
к вашему параметру Order
. Измените его на:
@POST(URL_ORDERS)
public void newOrder(@Body Order order, Callback<Boolean> success);
Retrofit использует Gson для сериализации и десериализации JSON по умолчанию. Gson использует имена переменных по умолчанию для сериализации, но их можно изменить с помощью аннотации @SerializedName("replacement_name")
.
Например, если ваш класс Order
выглядел следующим образом:
public class Order {
@SerializedName("custom_id")
private int id;
private String name;
private List<Item> items;
}
public class Item {
private int id;
private String name;
}
Затем Gson автоматически сериализует это значение
{
"custom_id": 1,
"name": "Hello Object",
"items": [
{
"id": 1,
"name": "Hello Item"
}
]
}