4

I was trying to get data from rest api using Retrofit. The api is a get request and the query params should be of the form
{state: 'state', filters: {page: 1, filter: ''}}

I tried creating a Filter class and annoted the same inside Request body class like below

public class ReferralRequestBody {
    @SerializedName("filters")
    @Expose
    private Filter filter;

    public Filter getFilter() {
        return filter;
    }

    public void setFilter(Filter filter) {
        this.filter = filter;
    }
}

This is how I am trying now to send the request. It is a get request with query params. I need to send the Filter as query param.

@GET("/api/data") 
Observable<APIResponse> getData(@Query("state") String state, 
                             @Query("filters") RequestBody filter);

But the request is still bad. Please help.

Mohammad Tabbara
  • 1,438
  • 1
  • 16
  • 31
user1002448
  • 425
  • 8
  • 22
  • is state compulsory in query parameter? – Pavya Mar 23 '18 at 08:19
  • Where is `state` in your `ReferralRequestBody`? – Reaz Murshed Mar 23 '18 at 08:20
  • take a look at http://www.jsonschema2pojo.org to make your classes for Retrofit/Gson – Karan Shishoo Mar 23 '18 at 08:28
  • query? but that format is json... if you gonna send a JSON object you need to make it a post otherwise you need to place the filter and state as query parameters. – Mohammad Tabbara Mar 23 '18 at 08:31
  • This is how I am trying now to send the request. It is a get request with query params. I need to send the Filter as query param. @GET("/api/data") Observable getData(@Query("state") String state, @Query("filters") ReferralRequestBody filter); – user1002448 Mar 23 '18 at 08:31
  • can you tell me how the query should look like in url form? As /api/data?state=state&filters=? – Mohammad Tabbara Mar 23 '18 at 08:45
  • @MohammadTabbara Like this. http://staging.endpoint.in/app/referrals?state='active'&filters={page=0,filter=''} – user1002448 Mar 23 '18 at 09:06
  • Observable getData(@Query("state") String state, @Query("filters") String filter); and in the place where you call .getData pass a string with the format {page:0,filter:data} would that be possible? – Mohammad Tabbara Mar 23 '18 at 09:38

1 Answers1

2

Create the following model classes,

public class ReferralRequestBody {

    @SerializedName("state")
    @Expose
    private String state;
    @SerializedName("filters")
    @Expose
    private Filters filters;

    public String getState() {
    return state;
    }

    public void setState(String state) {
    this.state = state;
    }

    public Filters getFilters() {
    return filters;
    }

    public void setFilters(Filters filters) {
    this.filters = filters;
    }

    }

Also, create this,

public class Filters {

    @SerializedName("page")
    @Expose
    private Integer page;
    @SerializedName("filter")
    @Expose
    private String filter;

    public Integer getPage() {
    return page;
    }

    public void setPage(Integer page) {
    this.page = page;
    }

    public String getFilter() {
    return filter;
    }

    public void setFilter(String filter) {
    this.filter = filter;
    }

    }

Then set the data for the state, filter like,

ReferralRequestBody referralrequestbody=new ReferralRequestBody();
referralrequestbody.setState("state");

Filters filters=new Filters();
filters.setPage("page data");
filters.setFilter("filter data");

and call the function as,

@GET("/api/data") 
Observable<APIResponse> getData(
                           @Body ReferralRequestBody referralrequestbody);
Subin Babu
  • 1,515
  • 2
  • 24
  • 50