Solucionando problema Encoding UTF-8 en Java Webapp sobre Tomcat 6

Trabajando en un proyecto Eclipse WTP Tomcat6, de una aplicación web Java con controladores basados en Spring de este estilo:

    @RequestMapping(params = "find=ByUserName", headers = "Accept=application/json")
    @ResponseBody
    public ResponseEntity<String> jsonFindUsuarioByUserName(@RequestParam("userName") String userName) {
... }

Donde la codificación utilizada es UTF-8. Teniendo correctamente definidos el content-type de paginas html y jsp, así como haciendo uso del CharacterEncodingFilter Spring en el web.xml.

  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>

me he encontrado con un problema en la codificación de los parámetros de la request URI no llegan al método del controller en UTF-8.

Después de perder un buen rato buscando y probando diferentes soluciones, he encontrado que el problema se encuentra en la configuración del conector de Tomcat. Para solucionarlo hay que añadir la propiedad URIEncoding=”UTF-8″ a la configuración del conector en el fichero server.xml.

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

Si utilizamos Tomcat desde Eclipse, el fichero a editar se encuentra en Servers/apache-tomcat-X.X.X-conf/server.xml

tomcat6_utf8_problem

Apendice I – Definir URIEncoding en Jboss AS 7.1
La configuración del URIEncoding para un servidor Jboss AS 7.1 se realiza de modo distinto a Tomcat. En concreto definiendo 2 propiedades en la configuración de la instancia.
En una configuración básica de Jboss basada en standalone, añadimos estas lineas al fichero de configuración standalone.xml, debajo de la sección extensions.

<system-properties>
	<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
	<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

Documentación:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Attributes
http://stackoverflow.com/questions/138948/how-to-get-utf-8-working-in-java-webapps
http://jboss7-oracle.blogspot.com.es/2011/12/uriencoding-in-jboss7.html

Advertisements