user1002448
user1002448

Reputation: 415

Retrofit get request with nested json object

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.

Upvotes: 4

Views: 1681

Answers (1)

Subin Babu
Subin Babu

Reputation: 1555

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);

Upvotes: 2

Related Questions