次のように、レトロフィットを使用してカスタムオブジェクトを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に変換してサーバーに送信することです。私はこれに正しい方法で取り組んでいますか?
エラーは、Order
パラメータに_@Body
_アノテーションを提供しないことによるものです。それを次のように変更します。
_@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"
}
]
}
_