我正在建立一个休息服务。我的服务Resource方法是这样的:
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;
}
请向我建议一种将Resource方法中的List<String>
转换为List<Filters>
并验证每个String表达式是否有效的好方法。基本上,我需要一个解析器将此字符串表达式转换为我的过滤器对象,其中运算符可以是任何有效的运算符。
答案 0 :(得分:2)
我认为您的查询不够清晰和精简。
请考虑:
https://github.com/jirutka/rsql-parser
一些例子:
如果要编写自己的解决方案,请考虑矩阵变量: filter = name = abc; age> 40; ....
希望它能起作用。