如何使用 Retrofit 查询过滤器 json

Posted

技术标签:

【中文标题】如何使用 Retrofit 查询过滤器 json【英文标题】:How to query filter json with Retrofit 【发布时间】:2021-12-17 18:27:56 【问题描述】:

我有返回工人列表的 api:


  "items": [
    
      "id": "e0fceffa-cef3-45f7-97c6-6be2e3705927",
      "avatarUrl": "https://cdn.fakercloud.com/avatars/marrimo_128.jpg",
      "firstName": "Dee",
      "lastName": "Reichert",
      "userTag": "LK",
      "department": "back_office",
      "position": "Technician",
      "birthday": "2004-08-02",
      "phone": "802-623-1785"
    ,
    
      "id": "6712da93-2b1c-4ed3-a169-c69cf74c3291",
      "avatarUrl": "https://cdn.fakercloud.com/avatars/alterchuca_128.jpg",
      "firstName": "Kenton",
      "lastName": "Fritsch",
      "userTag": "AG",
      "department": "analytics",
      "position": "Orchestrator",
      "birthday": "1976-06-14",
      "phone": "651-313-1140"
    ,
    ....
    ]
  

我想过滤响应,以便仅获取有关特定部门工作人员的信息。 我试着这样做:

interface WorkersApi 
    @GET("users")
    suspend fun getWorkers(
            @Query("department") department: String
    ): Workers

但它返回相同的列表,没有任何过滤器。如何过滤响应,以便仅获取有关特定部门工作人员的信息?

*Workers 只是一个只包含一个字段的数据类 - 项目列表(工人)

【问题讨论】:

【参考方案1】:

您尝试执行的操作会更改对服务器的请求。它将部门作为查询参数与请求一起发送。如果服务器不支持此参数,则不会发生任何事情。我不知道您是否与控制后端的人一起工作,但您可以与他们讨论他们是否可以为过滤结果添加功能。

如果您想在从服务器获取完整列表后过滤结果,只需在您获得的列表上应用过滤器即可。

您可以在 Workers 对象上执行此操作

val department = "example"
val filteredList = workersObject.items.filter it.department == department

【讨论】:

哦,谢谢。这是我最害怕的。我认为您是对的,服务器不支持此功能

以上是关于如何使用 Retrofit 查询过滤器 json的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有查询的情况下在 Retrofit 中提取 Json 数据

如何使用 Retrofit .... 解析嵌套的 json?

RxJava&Retrofit错误预处理

RxJava&Retrofit错误预处理

如何使用 Retrofit 解析 json

如何在Retrofit中同时解析多种数据格式