【发布时间】:2011-06-27 07:00:23
【问题描述】:
考虑以下控制器方法:
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(@RequestParam(value = "fq", required = false) String[] filterQuery) {
logger.debug(fq = " + StringUtils.join(filterQuery, "|"));
}
这是不同fq 组合的输出:
-
/test?fq=foo导致fq = foo -
/test?fq=foo&fq=bar导致fq = foo|bar -
/test?fq=foo,bar导致fq = foo|bar -
/test?fq=foo,bar&fq=bash导致fq = foo,bar|bash -
/test?fq=foo,bar&fq=导致fq = foo,bar|
示例 3 就是问题所在。我希望(想要/需要)它输出fq = foo,bar。
我尝试用\ 转义逗号并使用%3C,但都不管用。
如果我查看 HttpServletRequest 对象的版本:
String[] fqs = request.getParameterValues("fq");
logger.debug(fqs = " + StringUtils.join(fqs, "|"));
它打印预期的输出:fqs = foo,bar。所以“问题”出在 Spring 数据绑定上。
我可以绕过 Spring 的绑定并使用 HttpServletRequest,但我真的不想这样做,因为我在我的真实代码中使用了 backing bean(同样的事情正在发生)并且不要不希望重新实现绑定功能。我希望有人可以提供一种通过转义或其他机制来防止这种行为的简单方法。
TIA
更新:我在 Twitter 上发布了这个 Q 并得到回复说 预期的输出出现在 Spring 3.0.4.RELEASE。我现在已经确认是这种情况,因此是一个临时修复。我将继续将此作为 Spring JIRA 系统上的错误记录下来。如果有人可以提供解决方法或修复 3.0.5,我会接受他们的回答。
【问题讨论】:
-
我建议您将您的解决方案添加为您自己问题的答案,以便其他人更清楚您找到了解决方案。
-
感谢菲利普的建议。事实证明,使用 3.0.4 的修复适用于 @RequestMapping,但在绑定到表单支持 bean 时不能修复相同的问题。所以我还没有修复我的应用程序。我还没有收到关于 Spring Jira 问题的评论/更新——我认为这有点松懈。
标签: java spring data-binding spring-mvc