如何在SpringREST中创建查询解析器来解析查询参数

如何在SpringREST中创建查询解析器来解析查询参数,spring,rest,Spring,Rest,我的查询参数如下: q=name:abc+age:20+roleid:(23|45)|audeince:(23|24).Here + is for AND | is for OR 我必须接受这个查询参数,因为它进入我的spring控制器,并且必须向solar进行查询以获取数据  @控制器 @请求映射(“/user”) 公共类图书管理员{ @RequestMapping(value=“/details”,method=RequestMethod.GET) 公共响应权限getUser(最终Htt

我的查询参数如下:

q=name:abc+age:20+roleid:(23|45)|audeince:(23|24).Here + is for AND | is for OR
我必须接受这个查询参数,因为它进入我的spring控制器,并且必须向solar进行查询以获取数据

@控制器
@请求映射(“/user”)
公共类图书管理员{
@RequestMapping(value=“/details”,method=RequestMethod.GET)
公共响应权限getUser(最终HttpServletRequest请求){
字符串params=requestParams.get(“q”)[0];
//在apache solar中传递此字符串以进行查询
}
}
我需要编写一个解析器来拆分参数值以进行solar查询。如何编写一个查询解析器来拆分上述url以使solar查询满足OR和条件。name:abc+age:20+roleid:(23 | 45)| audeince:(23 | 24)表示创建一个solar查询,其中name=abc,age=20,roleid in(23,24)或publications in(23,24)。这样用户就可以发送查询

例如:firstName:(abc | bcd)+lastName:abc+emailId:abc+dsID:abc | countryCd:US+audenceid:(123+678)

首先像这样使用正则表达式转换 名字:(abc | bcd)+------------段1

姓氏:abc+………段2

emailId:abc+………第3部分

dsID:abc |----------段4

countryCd:美国+--------------细分市场5

听众ID:(123+678)---第6段

就像url中可能出现的许多片段一样

我有一门课叫

Queryobj类{

私有字符串字段

私有列表值

私有字符串运算符

私有字符串外部运算符

}

firstName:(abc | bcd)+再次使用这样的正则表达式映射

字段=名字

值={abc,bcd}

内部操作员=|

外部运算符=+

比如第二段emailId:abc+

字段=电子邮件ID

值=abc

internalOperator=null

外部运算符=+

其他段也一样。如果有n个段,则有n个对象


然后将每个对象添加到链表中。如果internalOperator或externalOperator为null,则将其保留为null。如何实现这一点

您可以使用此正则表达式模式获取“key:value operator”段


你能发布控制器代码说明你尝试过什么吗?这个字符串是什么意思?它由哪些部分组成?只要我们必须猜测它的意思,我们就只能猜测如何解析它。@Controller@RequestMapping(“/user”)公共类BooksController{@RequestMapping(value=“/details”,method=RequestMethod.GET)公共响应属性getUser(最终HttpServletRequest请求){String params=requestParams.GET(“q”)[0];//传递此字符串以在服务类中进行查询}请回答您想添加代码的问题。不要将代码放入注释中,这很难阅读。请查看Lutz Horn或Gyanapriya,并告诉我请解释我无法理解的详细代码。itI需要一个解决方案,该解决方案将提取键值对以及运算符(and,or),然后将其放入数据结构中,以便用于查询。还有运算符(and,or)满足于键值对dknight您能否帮助我从第一个示例开始,我假设此查询字符串由以下样式组成:q->“key:values op”key->[a-zA-z0-9]op->[+|]、values->[a-zA-Z_0-9]或([a-zA-Z_0-9])。我认为可以首先匹配模式:(\w),然后使用运算符“+”或“|”拆分q字符串。我怀疑为什么“+”存在于字符串中:(123+456)?+在字符串中表示年龄=123,年龄=456
@Controller
@RequestMapping("/user")
public class BooksController {
 @RequestMapping(value="/details", method=RequestMethod.GET)
public ResponseEntity<?> getUser(final HttpServletRequest request) {

  String params = requestParams.get("q")[0];
    //passing this string to make query in apache solar
}
}
Pattern keyValuePattern = Pattern.compile("[\\w]+:([\\w@.]+|\\([\\w|+@.]+\\))[+|]?");