troyzhxu / bean-searcher

🔥🔥🔥 A read-only ORM focusing on advanced query, naturally supports joined tables, and avoids DTO/VO conversion, making it possible to realize complex query in one line of code !
https://bs.zhxu.cn
Apache License 2.0
1.31k stars 148 forks source link

【日期参数格式兼容问题】controller比SuffixOpParamFilter过滤器先执行 #100

Closed Gelilory closed 1 month ago

Gelilory commented 3 months ago

我同时打开了SuffixOpParamFilter、JsonArrayParamFilter 发现controller比SuffixOpParamFilter过滤器先执行,导致id-il类似的参数无法识别。请问是什么原因

troyzhxu commented 3 months ago

参数过滤器 SuffixOpParamFilter 是在调用 Bean Searcher 的检索器的 searchXxx(..) 方法里才会执行的。 你遇到这个问题,调用 searchXxx(..) 方法时传入的参数都有哪些呢?

Gelilory commented 3 months ago

我又检查了代码,发现xxx-il是可以被解析,xxx-bt无法被解析为between区间查询 我使用的search()方法传参如下,start-bt无法被解析为between区间查询,而是被解析成为starttm>=? image image

troyzhxu commented 3 months ago

你的截图里 searchXxx(..) 方法的入参里传的就是 starttm-bt,没见到有传 start-bt

Gelilory commented 3 months ago

我描述错了,是starttm-bt无法解析为between区间查询条件

troyzhxu commented 3 months ago

我描述错了,是starttm-bt无法解析为between区间查询条件

只有 条件属性 才能这么用,在你的 XcRecords 类里有 starttm 这个条件属性吗?截图看一下。

Gelilory commented 3 months ago

前端传参如下图 image

开启bean search参数过滤器相关配置 image

Vo类代码如下 image

Controller代码如下图,使用@RequestBody接收参数 image

ServiceImpl代码如下图,将接收到的map直接传入search()方法 image

最终解析生成的sql,并不是between区间查询条件 image

troyzhxu commented 3 months ago

参数值给错了,启用了 JsonArrayParamFilter 后,starttm_bt 的值应该传 JSON数组字符串,而不是 JSON 数组对象

{
   starttm_bt: '["2024-08-01", "2024-09-01"]',
}

因为你传了 JSON 数组对象 后,到后端 Controller 的参数里时,已经不再是 JSON 了,而是变成 ArrayList

Gelilory commented 3 months ago

starttm_bt参数改为字符串了,还是无法解析成between区间查询条件 image image image

Gelilory commented 3 months ago

我后来使用自定义sql条件,替代实现时间区间查询 image image

troyzhxu commented 3 months ago

日期格式给错误了,'["2024-08-01", "2024-09-01"]',你写成了 '["2024-8-1", "2024-9-1"]',少了 2 个 0

troyzhxu commented 4 weeks ago

新版本 v4.3.5 已支持了 ["2024-8-1", "2024-9-1"] 这种日期格式:https://github.com/troyzhxu/bean-searcher/releases/tag/v4.3.5