gpt4 book ai didi

java - java中的分割和验证比较表达式

转载 作者:行者123 更新时间:2023-11-30 02:02:15 24 4
gpt4 key购买 nike

我正在构建一个 Rest 服务。我的服务资源方法是这样的:

public Response<List<AuditEvent>> getAuditEvents(@QueryParam("filters") List<AuditRequest.Filter> filters,
@QueryParam("orderBy") @DefaultValue("id") String order,
@QueryParam("isDesc") @DefaultValue("true") boolean desc,
@QueryParam("startTime") long startTimestamp,
@QueryParam("endTime") long endTimestamp,
@QueryParam("limit") @DefaultValue("20") int size,
@QueryParam("offset") @DefaultValue("0") int startIndex)

这里的过滤器可以是多个表达式,例如:

/api/audit/query/?filters=username='admin'&filters=customerId=1&limit=1&orderBy=rowId&isDesc=false&offset=2

我还创建了一个 Filter 类:

public static class Filter {
private String propertyId;
private String op;
private Object value;

}

请建议我一个好的转换方法List<String>进入资源方法 List<Filters>并验证每个字符串表达式是否有效。基本上,我需要一个解析器来将此字符串表达式转换为我的过滤器对象,其中运算符可以是任何有效的运算符。

最佳答案

我认为您的查询不清晰且简洁。

请考虑:

https://github.com/jirutka/rsql-parser

一些例子:

  • 名称==“杀死比尔”;年份=gt=2003
  • 姓名==“杀死比尔”和年份>2003
  • genres=in=(科幻、 Action );(导演=='克里斯托弗·诺兰'、 Actor ==*贝尔);year=ge=2000
  • 流派=in=(科幻、 Action )和(导演==“克里斯托弗·诺兰”或 Actor ==*贝尔)和年份>=2000
  • director.lastName==诺兰;year=ge=2000;year=lt=2010

如果您想编写自己的解决方案,请考虑矩阵变量:过滤器=名称=abc;年龄>40;....

希望它能成功。

关于java - java中的分割和验证比较表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com