【发布时间】:2020-06-04 23:58:40
【问题描述】:
我想构建一个返回 Order 对象的简单端点,我可以在其中通过单个查询参数或多个查询参数的组合搜索此订单。所有这些查询参数都是可选的,原因是不同的人会根据不同的 Id 访问这些订单。
例如:
/order/items?itemId={itemId}&orderId={orderId}&deliveryId={deliveryId}&packetId={packetId}
@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 Optional 并使用 @RequestParam(required = false),但这里的问题是如何避免检查查询参数是否为空的 if-else 或 .isPresent() 噩梦?或者是否有一种优雅的方式,取决于参数的星座,进一步传递给我的服务和 Spring Data JPA 存储库。
【问题讨论】:
-
我总是像
WHERE (:myParam IS NULL OR TABLE.COLUMN = :myParam )这样为可选参数构建我的 SQL...这样您的查询处理 null 并且您可以从该查询中获得更多信息..所以我实际上会使用@RequestParam(required = false) -
但是搜索端点应该真正返回一个数组,而不是单个项目
-
将空值传递给查询和let the query handle it。
-
好吧,在这种情况下,如果存在的话,它应该只是一个订单。
-
如果它是一个搜索端点(它是),它应该返回一个结果数组......它也被称为
getOrders,它也会让人们相信它返回多个......跨度>
标签: java rest spring-boot spring-data-jpa software-design