处理Spring-mvc中POST请求参数中的特殊字符

4

我有一个使用Spring MVC 3.0的应用程序。 控制器的配置如下:

@RequestMapping(value = "/update", method = RequestMethod.POST)
public ModelAndView updateValues(
 @RequestParam("einvoiceId") String id){
...}

当发布包含特殊字符的ID(在本例中为管道符|)时,使用UTF-8进行URL编码(id=000025D26A01%7C2014174),字符串ID将包含%7C。我希望spring-mvc对参数进行URL解码。我知道我可以通过使用

来解决这个问题。
java.net.URLDecoder.decode()

但是由于我有大量的控制器,我希望框架可以自动完成这个任务。我已经使用URIEncoding="UTF-8"配置了Tomcat连接器,并配置了一个CharacterEncodingFilter,但据我所知,这只会影响GET请求。你有什么想法可以让spring-mvc解码我的POST参数吗?

2个回答

1

谢谢你的回答。然而,我已经在使用 org.springframework.web.filter.CharacterEncodingFilter。它所做的只是 request.setCharacterEncoding。我的请求已经有了 UTF-8,但它无法将特殊字符转换为 %7C。 - jakobklamra
也许你需要 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" ...> 在这里看一下 http://tech.top21.de/techblog/20100421-solving-problems-with-request-parameter-encoding.html;jsessionid=DAC7E8A568ED4EF9EB181BCDC785B010 - frytaz
1
非常感谢。问题已经解决了,结果是我的问题。我一直在使用Chrome的Rest Console进行测试。这个插件会自动编码参数,这意味着我的参数被双重编码了。我的错。它确实确认了我的设置是正确的。感谢所有的反馈。 - jakobklamra

0

我相信你遇到了和我一样的问题。 尝试使用@PathVariable而不是@RequestParam

@PathVariable is to obtain some placeholder from the uri (Spring call it an URI Template) — see Spring Reference Chapter 16.3.2.2 URI Template Patterns

如果您这样做,您必须更改您的URL,并且不提供参数'id'。 只需使用"/update/000025D26A01%7C2014174"。 更多信息可以在我找到解决方案的地方找到@RequestParam vs @PathVariable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接