Spring mvc 带有Thymeleaf和Tomcat 8 UTF-8编码问题的Spring MVC
我对编码有一些问题。据我所知,我必须做这一切,我做到了。但在那之后,我的编码问题仍然存在。我使用的是SpringMVC、SpringSecurity、Thymeleaf、Tomcat8和Maven3 这是一些照片 我通过模型传递了字符串,它正在工作。 这是来自my message.properties文件的验证消息。发生编码错误。 我正在尝试将一些记录保存到数据库,但再次发生错误。 这就是我所做的 我编辑了Tomcat的server.xmlconfig并添加了UTF-8编码Spring mvc 带有Thymeleaf和Tomcat 8 UTF-8编码问题的Spring MVC,spring-mvc,tomcat,encoding,utf-8,thymeleaf,Spring Mvc,Tomcat,Encoding,Utf 8,Thymeleaf,我对编码有一些问题。据我所知,我必须做这一切,我做到了。但在那之后,我的编码问题仍然存在。我使用的是SpringMVC、SpringSecurity、Thymeleaf、Tomcat8和Maven3 这是一些照片 我通过模型传递了字符串,它正在工作。 这是来自my message.properties文件的验证消息。发生编码错误。 我正在尝试将一些记录保存到数据库,但再次发生错误。 这就是我所做的 我编辑了Tomcat的server.xmlconfig并添加了UTF-8编码 <
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/html/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setContentType("text/html;charset=UTF-8");
viewResolver.setCharacterEncoding("utf-8");
return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
redirectPort="8443" />
我所有的html文件都有这个用于编码的元标记行
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/html/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setContentType("text/html;charset=UTF-8");
viewResolver.setCharacterEncoding("utf-8");
return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
我用UTF-8编码创建了数据库,如下所示
postgres=# CREATE USER unicodeuser WITH PASSWORD 'mypass123';
postgres=# CREATE DATABASE unicode WITH ENCODING 'UTF8' OWNER unicodeuser;
postgres=# GRANT ALL ON DATABASE unicode TO unicodeuser;
我创建了用于编码的JAVA_OPTS环境变量
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/html/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setContentType("text/html;charset=UTF-8");
viewResolver.setCharacterEncoding("utf-8");
return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
我还将我的pom.xml文件更改为UTF-8编码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/html/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("LEGACYHTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setContentType("text/html;charset=UTF-8");
viewResolver.setCharacterEncoding("utf-8");
return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
UTF-8
...
org.apache.maven.plugins
maven资源插件
2.7
UTF-8
我尝试了互联网上的一切,但仍然找不到解决办法。任何关于我缺少什么的想法都很好。fatiherdem,在所有情况下,您都不会注意Spring安全性。试试这个答案。我与您有相同的技术堆栈,这个答案对我来说很有用我在验证消息方面遇到了同样的问题,所有的代码解决方案仍然不够。在我使用Intellij作为编辑器的情况下,我检查了
transapartent native to ascii conversion
,以解决这个问题。请查看我的完整答案。您可以在流程之前使用thymeleaf评论的技巧:
在
CsrfFilter
之前放置CharacterEncodingFilter
为我解决了编码问题。