我有一个REST GET服务,它接受查询参数,如名字和姓氏,并将根据它返回结果。该服务必须支持精确和通配符搜索。如果要触发通配符搜索,则客户端可以将*作为通配符条目传递。例如,他想要名字以Mur开头的所有用户,他将传递firstName = mur *。
由于无法在查询字符串中传递*,因此必须传递URL编码值*,即%2A。问题是即使发送编码值,服务也会抛出错误
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是java.util.regex.PatternSyntaxException:在索引0附近悬挂元字符'*'
我确实通过:(%3A)或& (%26)并且它成功运行,为什么*字符没有被读取。
我正在使用POSTMAN rest cleint和SOAPUI测试服务,并且两者都抛出相同的错误。这是Spring的一个问题吗?
感谢您的帮助!! 塔塔
答案 0 :(得分:2)
从错误消息中,我猜你正在使用(有意或无意)其中一个正则表达式函数,例如Pattern
,String.matches()
,String.replaceAll()
或类似的任何方法检查名称是否与作为参数传递的模式匹配。
因此,您的模式必须遵循正则表达式语法,其中“以mur
开头的任何名称”应表示为mur.*
(注意点),而不是mur*
。如果您将星号*
作为唯一字符传递,则会导致正则表达式无效,从而导致错误。
错误消息java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
明显表示我们正在处理正则表达式,并且违规星号是字符串中的第一个字符(索引0)。
因此,如果上述情况属实,则您必须以正则表达式语法传递查询,或者更改将名称与模式匹配的方式以匹配您要使用的语法。