在REST查询参数中传递编码*

时间:2014-11-10 19:30:09

标签: java regex spring rest spring-mvc

我有一个REST GET服务,它接受查询参数,如名字和姓氏,并将根据它返回结果。该服务必须支持精确和通配符搜索。如果要触发通配符搜索,则客户端可以将*作为通配符条目传递。例如,他想要名字以Mur开头的所有用户,他将传递firstName = mur *。

由于无法在查询字符串中传递*,因此必须传递URL编码值*,即%2A。问题是即使发送编码值,服务也会抛出错误

  

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是java.util.regex.PatternSyntaxException:在索引0附近悬挂元字符'*'

我确实通过:(%3A)或& (%26)并且它成功运行,为什么*字符没有被读取。

我正在使用POSTMAN rest cleint和SOAPUI测试服务,并且两者都抛出相同的错误。这是Spring的一个问题吗?

感谢您的帮助!! 塔塔

1 个答案:

答案 0 :(得分:2)

从错误消息中,我猜你正在使用(有意或无意)其中一个正则表达式函数,例如PatternString.matches()String.replaceAll()或类似的任何方法检查名称是否与作为参数传递的模式匹配。

因此,您的模式必须遵循正则表达式语法,其中“以mur开头的任何名称”应表示为mur.*(注意点),而不是mur*。如果您将星号*作为唯一字符传递,则会导致正则表达式无效,从而导致错误。

错误消息java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0明显表示我们正在处理正则表达式,并且违规星号是字符串中的第一个字符(索引0)。

因此,如果上述情况属实,则您必须以正则表达式语法传递查询,或者更改将名称与模式匹配的方式以匹配您要使用的语法。