jakobklamra
jakobklamra

Reputation: 49

Handling special characters in post parameters for Spring-mvc

I have an application using spring-mvc 3.0. The controllers are configured like this:

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

When posting an id that contains special characters (in this case pipe |), url-encoded with UTF-8 (id=000025D26A01%7C2014174) the string id will contain %7C. I was expecting spring-mvc to url decode the parameter. I am aware that I can solve this by using

java.net.URLDecoder.decode()

but since I have a large number of controllers, I would like this to be done automatically by the framework. I have configured the Tomcat connector with URIEncoding="UTF-8" and configured a CharacterEncodingFilter, but as I understand it this will only affect GET requests. Any ideas on how I can make spring-mvc url decode my post parameters?

Upvotes: 4

Views: 11459

Answers (2)

Augustin Ghauratto
Augustin Ghauratto

Reputation: 1520

I believe you encounter the same issue as I did. Try using @PathVariable instead @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

If you do, you have to change your url and don't provide parameter 'id'. Just "/update/000025D26A01%7C2014174". More information can be found where I found the solution for my problem @RequestParam vs @PathVariable

Upvotes: 0

frytaz
frytaz

Reputation: 586

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3 This page says CharacterEncodingFilter can change POST parameters

Upvotes: 1

Related Questions