java - Java & Spring,持久化用户定义的过滤器
问题描述
我想做的是能够为 api 用户提供为特定(最终是多个)实体保存过滤器(例如 /endpoint?id.in=123,456)的能力。
为了执行实际的过滤器,我使用了 spring data JPA Specifications (with jhipster's Criteria DTO),这就像一个魅力。但是,要持久化实际的 Specification 对象或 CriteriaDTO,将是一项大型(并且可能是混乱的)任务。
我的想法是创建一个通用表结构(在 postgres 中),它可以支持我的过滤要求,并且足够通用,可以支持所有实体。然后使用该对象构造 CriteriaDTO 并将其传递给实体的服务(如果需要,我可以发布我对表结构的想法)
在我走这条路之前,我想从社区中获得见解,这里有更好的解决方案吗?
看起来这是具有特定模式的常见要求
解决方案
但是,要持久化实际的 Specification 对象或 CriteriaDTO,将是一项大型(并且可能是混乱的)任务。
你怎么会那么说?我不熟悉 jhipsters 的CriteriaDTO
工作原理,但我知道规范是如何创建的。
为了创建规范,您需要可能从 API 端点获得的搜索条件。它可以是一个序列化的 json 对象、查询字符串参数、post 参数或其他任何东西。
如果您想保存用户的搜索条件,我建议将其作为 json(文本)字段存储在您的数据库中。因此,下次用户想要使用相同的已保存过滤器过滤数据时,只需获取存储的 json,将其反序列化并将其提供给 Specification(无需序列化Specification
对象,只需用于他的创建的参数)。
我相信你的实现方式也是可能的,但它更难实现,我没有看到任何好处,除了你可能能够查询过滤器参数(例如:查找哪个是最常用的过滤器)。
推荐阅读
- javascript - 通过在间隔期间单击另一个按钮来停止和重置间隔
- python-3.x - 导入 PyARMViz 包时抛出类型错误。如何解决?
- json - 使用带 curl 的相对路径发送 JSON 文件
- c - C绝对初学者指南第8章Ex2
- javascript - 摩纳哥编辑器反应电子卡在加载
- jquery - 将下拉菜单更改为反之亦然 jQuery 调整大小?
- python - 根据每日高低价格获取一周的高低价格日期
- python - 如何在控制台中查看代码 [Python、Tkinter、Atom]
- python - 极地 hist2d 没有显示完整的情节
- flutter - Flutter - 使用 Freezed 实现接口时出错