Search code examples
springresturldecode

Where is RESTful API parameter URL-decoded?


I have a Spring-based RESTful API which is deployed to a Tomcat server. When I call this API like below (value of "para" has been URL-encoded) and debug it, value of "para" in controller method is "aaa bbb" which has already been URL-decoded.

However, when I run a SpringBoot-based local Test Automation case (not deployed anywhere) to test the same API, the value of "para" in controller method hasn't been URL-decoded.

Question is, what is the difference between the two scenarios and where is "para" URL-decoded in the first scenario?


Solution

  • Hopefully I can give you a hint for the first part of your question:

    The Apache Tomcat server.xml contains an tag Connector, this tag can have an optional attribute URIEncoding. Example:

    <Connector connectionTimeout="20000"
               port="8080"
               protocol="HTTP/1.1"
               redirectPort="8443"
               URIEncoding="UTF-8" />
    

    So I think that Tomcat is responsible for the URI encoding. But I do not know how this is activated in an Embedded-Spring-Boot-Tomcat.