2011-08-31 82 views
4

我有一個使用spring-mvc 3.0的應用程序。 該控制器被配置是這樣的:處理Spring-mvc的post參數中的特殊字符

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

投遞包含特殊字符的ID(在這種情況下管|),網址編碼使用UTF-8(ID = 000025D26A01%7C2014174)將字符串ID將包含%7C。我期待spring-mvc能夠對參數進行url解碼。我知道我可以通過使用

java.net.URLDecoder.decode() 

但由於我有大量的控制器, 我已經配置了Tomcat連接器URIEncoding="UTF-8"並配置了一個CharacterEncodingFilter,但據我瞭解,這隻會影響GET請求。 關於如何讓spring-mvc url解碼我的發佈參數的任何想法?

回答

1

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3 本頁面說CharacterEncodingFilter可以更改POST參數

+0

感謝您的回答。不過,我已經在使用'org.springframework.web.filter.CharacterEncodingFilter'。它所做的就是'request.setCharacterEncoding'。我的請求已經有UTF-8,但它不能將特殊字符轉換爲%7C。 – jakobklamra

+0

也許你需要看看這裏http://tech.top21.de/techblog/ 20100421-solving-problems-with-request-parameter-encoding.html; jsessionid = DAC7E8A568ED4EF9EB181BCDC785B010 – frytaz

+1

非常感謝。問題已經解決,事實證明這是我的錯。我一直在使用Chromes 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 

如果你這樣做,你必須改變你的網址,不要提供參數'id'。 只是「/ update/000025D26A01%7C2014174」。 更多的信息可以在我發現我的問題的解決方案@RequestParam vs @PathVariable