16588


retrofit <http://square.github.io/retrofit/> を使って、APIの定義を書こうと思うのですが  
<http://example.com/hoge?kage20150825>  
<http://example.com/hoge?kage20150826>  
<http://example.com/hoge?kage20150827>  
のように、?の後の項目を任意に変えるにはどうしたらよいのでしょうか

[code]

    public interface APIInterface {
    @GET("/hoge?{date}")
    void  getActivityNotificationList(@Path("date") String date, Callback<xxx> xxx);
    }
    
[/code]

と書いたのですが

java.lang.IllegalArgumentException: APIInterface.getActivityNotificationList:
URL query string "{date}" must not have replace block.

と出て拒否されてしまいます。

URLの構造を変える事は出来ないです。


CC BY-SA 3.0
2015-08-25T11:40:22.713
14830
2015-09-14T07:26:23.767
805
question
android java retrofit
Javaのhttp通信プラグインretrofitのURLの定義が出来ない


今更、かつ正しい使い方とも思えませんが、  
以下のようにすると、実現はできる様です。

インターフェースの定義

[code]

    @GET("/hoge")
    Call<ResponseBody> getActivityNotificationList( @QueryMap Map<String, Object> map);
    
[/code]

実行

[code]

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("kage20150825", new Object() { public String toString() { return null;}});
    service.getActivityNotificationList(map);
    
[/code]

retrofitのソースを見たところ、パラメータの値をtoStringした結果がnullの場合に、  
クエリパラメータに=をつけない様だったので、その動作を利用しました。  
実装を見る限り、他の方法では実現できなそうです。


CC BY-SA 3.0
2015-09-14T07:26:23.767
16588
2015-09-14T07:26:23.767
10103
14830
answer