【问题标题】:Retrofit get request with nested json object使用嵌套的 json 对象改造获取请求
【发布时间】:2018-09-01 20:40:59
【问题描述】:

我试图使用 Retrofit 从 rest api 获取数据。 api 是一个get 请求,查询参数的格式应该是
{state: 'state', filters: {page: 1, filter: ''}}

我尝试创建一个 Filter 类,并在 Request body 类中添加了相同的注释,如下所示

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

    public Filter getFilter() {
        return filter;
    }

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

这就是我现在尝试发送请求的方式。这是一个带有查询参数的获取请求。我需要将过滤器作为查询参数发送。

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

但请求仍然很糟糕。请帮忙。

【问题讨论】:

  • 查询参数中的状态是强制性的吗?
  • state 在您的ReferralRequestBody 中的哪个位置?
  • 看看 jsonschema2pojo.org 为 Retrofit/Gson 制作课程
  • 查询?但该格式是 json...如果您要发送 JSON 对象,则需要将其设为帖子,否则您需要将过滤器和状态作为查询参数放置。
  • 这就是我现在尝试发送请求的方式。这是一个带有查询参数的获取请求。我需要将过滤器作为查询参数发送。 @GET("/api/data") Observable getData(@Query("state") String state, @Query("filters") ReferralRequestBody filter);

标签: android json retrofit okhttp get-request


【解决方案1】:

创建以下模型类,

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

    }

另外,创建这个,

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

    }

然后为状态设置数据,过滤like,

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

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

并将函数调用为,

@GET("/api/data") 
Observable<APIResponse> getData(
                           @Body ReferralRequestBody referralrequestbody);

【讨论】:

  • 不.. 你不能同时拥有@Body@GET
  • 是的,它适用于 POST,如果您发送数据,它必须是 POST 方法,否则您可以使用您的 URL 进行编码
猜你喜欢
  • 2014-05-29
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多