当前位置: 首页 > 知识库问答 >
问题:

您如何在Spring Boot中处理只有可选查询参数的REST API?

袁泰平
2023-03-14

我想构建一个返回order对象的简单endpoint,在这个endpoint中,我可以通过一个查询参数或几个查询参数的组合来搜索这个order。所有这些查询参数都是可选的,原因是不同的人将基于不同的ID访问这些订单。

例如:/order/items?itemId={itemId}&orderId={orderId}&deliveryId={deliveryId}&packetId={packetidid}

@GetMapping(path = "/order/items", produces = "application/json")
public Order getOrders(@RequestParam Optional<String> itemId,
                              @RequestParam Optional<String> orderId,
                              @RequestParam Optional<String> deliveryId,
                              @RequestParam Optional<String> packetId) { }

当然,我也可以跳过Java可选项,使用@requestparam(required=false),但这里的问题是如何避免if-else.ispresent()检查查询params是否为null的噩梦?或者,是否有一种优雅的方法,根据params的星座,进一步传递到我的服务和Spring数据JPA存储库。

共有1个答案

孔飞舟
2023-03-14

我的小建议是避免使用过于通用的API,例如,您可以将映射拆分为几个endpoint(例如:/order/delivery/itemId/{itemId}和/order/delivery/deliveryId/{deliveryId}和/order/delivery/packetId/{packetId),并处理您需要在客户端调用的endpoint。

 类似资料:
  • 在下面的代码中,我有时会将设置为null。此时,它抛出错误为“could not extract resultset;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammarexception:could not extract resultset” 即使为空,我如何获取数据。总有一天约会就要来了。这是怎么做的? null

  • 我不明白 FastAPI 中的可选查询参数。它与默认值为 的默认查询参数有何不同? 在下面的示例中,arg1和arg2有什么区别?在该示例中,arg2是一个可选的查询参数,如上面的链接所述。

  • 问题内容: 我在SpringData中使用QueryDSL。我说表,我创建了实体类, 我写了以下 服务 方法 如上所述,我评论了。如何使用 QueryDSL 在可选参数 QueryDSL 使用Spring的数据? 谢谢 :) 问题答案: 可以用作布尔表达式的动态生成器:

  • 我将QueryDSL与SpringData一起使用。我有表say,并创建了实体类say,我编写了以下服务方法 与上面一样,我注释了。如何在使用Spring数据的QueryDSL中对可选参数使用QueryDSL?

  • 问题内容: 使用Hibernate时,有什么方法可以在命名查询中指定可选参数(例如,从表单提供搜索参数而并非所有参数都是必需的)?我正在使用本机SQL查询,但该问题可能也适用于命名HQL查询。 我很确定对此的答案是“否”,但是我还没有在文档中找到确切的答案。 问题答案: AFAIK,没有这样的事情,因此您必须为此编写一个动态查询。也许看一下以前的答案,该答案显示了如何在HQL中执行此操作(您可以将

  • 问题内容: 我正在使用JPA,hibernate3。 当没有空值或空值时,此查询就像一个超级按钮。但是 traceEntityVO.getLotNumber(),traceEntityVO.getMfrLocId(),traceEntityVO.getExpDate()的 值可能为null或为空 。 在这种情况下,将针对变量而不是 null 条件来检查值’null’或’‘ 。当我不确定参数值是否为