UTF-8 encoding in Spring MVC, problem with FORMs

I solved this.

That filter in web.xml must be first filter in file.


I had similar problem. When I post a form and save it in DB, it is inserted as ?????? but if I manually insert to DB using the MySQL WorkBench it works fine.

I thought the problem is only in http request encoding. So, I almost implemented all recommendations I found about this issue like change server.xml, adding filter to web.xml and changing settings in MySQL config file my.ini but it does not solve my problem.

The problem was due to two things the http request encoding and the JDBC connection. For some reason MySQL is accepting data as ISO-8859-1 not as UTF-8.

So, I reverted all changes and I made below two changes: Change Tomcat server.xml as below:

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

Change Jdbc connection properties as below:

jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/dB_Name?useUnicode=yes&characterEncoding=UTF-8
jdbc.username=root
jdbc.password

The solution key here is adding useUnicode=yes&characterEncoding=UTF-8

Add a filter like @jbb did in **web.xml:**

<filter>
     <filter-name>encoding-filter</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>

 <filter-mapping>
     <filter-name>encoding-filter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>

If Thymeleaf is used, change viewResolver and TemplateResolver as below:

viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");

templateResolver.setCharacterEncoding("UTF-8");

Note that this works only for POST requests. If you want to code also GET requests (i.e. links with <a href=...>), you will have to modify your server's server.xml file, by adding URIEncoding="UTF-8" useBodyEncodingForURI="true" attributes in the <Connector> tag.

See : http://wiki.apache.org/tomcat/FAQ/CharacterEncoding