20-junio-2023
admin

Problema de Encoding UTF-8 en Spring MVC

CharacterEncodingFilter es un filtro que nos ayuda a especificar un tipo de codificación de caracteres concreto tanto para solicitudes y como para las respuestas.

Se puede configurar en el fichero web.xml de tu aplicación. De la siguiente forma:

 

   encodingFilter
   org.springframework.web.filter.CharacterEncodingFilter
   
       encoding
       UTF-8
   
   
       forceEncoding
       true
   


   encodingFilter
   /*

En el caso de que estés usando Spring Security, en lugar de configurar el CharacterEncodingFilter en el web.xml necesitas crear un filtro personalizado y añadirlo a la cadena de filtros en primer lugar. Puedes asegurarte que el filtro esté el primero si lo añades con el addFilterBefore en tu clase WebSecurityConfigurerAdapter. Ejemplo:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   ...
   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http.addFilterBefore(new EncodingFilter(), ChannelProcessingFilter.class);
      ...
   }
}
public class EncodingFilter extends GenericFilterBean {
@Override
public void doFilter(
   ServletRequest request,
   ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
      request.setCharacterEncoding("UTF-8");
      response.setCharacterEncoding("UTF-8");
      chain.doFilter(request, response);
   }
}

Además, para que funcione el encoding, se debe tener en cuenta lo siguiente:
1 – Es necesario añadir en las jsps la siguiente definición.

< %@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" % >

2 – En caso de estar utilizando Tomcat puede se sea necesario setear el valor URIEncoding en el fichero server.xml.

 

Comentarios cerrados.

Categorias

Linkedin