java - Spring MVC + Hibernate编码问题

标签 java hibernate spring encoding spring-mvc

我在 Spring MVC + Hibernate 应用程序上工作,使用 MySQL(版本 5.0.51a)和 InnoDB 引擎。

当我发送带有西里尔字符的表单时出现问题。 结果,数据库包含未知编码的无意义字符。

所有使用 UTF-8 创建的 JSP 页面、数据库(+ 表和字段)。 Hibernate 配置还包含将编码设置为 UTF-8 的属性。

我通过创建使用 UTF-8 编码请求内容的过滤器解决了这个问题。 示例代码:

…
encoding = "UTF-8";
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
…

但它明显减慢了应用程序的速度。

有趣的是,直接从应用程序执行插入查询(即从 Eclipse 作为 Java 应用程序运行)工作完美。

UPD。

据我所知,在我的案例中使用过滤器是唯一可行的解​​决方案。

我不知道标准的 CharacterEncodingFilter。现在使用它,效果很好!

<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>

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

最佳答案

您的 JSP 文件必须是 UTF-8,这有两种方式:

  • 标题<%@page pageEncoding="UTF-8" %>
  • 他们的内容 - right-click > properties在 eclipse 中并将其编码设置为 UTF-8(它可能会拒绝转换它,因此剪切当前内容,更改编码,然后将其粘贴回去)

然后spring有一个 CharacterEncodingFilter 对于这种情况,应该不会对性能造成任何重大影响:

<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>

实际上,任何过滤器都不会对性能造成重大影响,除非其 doFilter()方法声明synchronized .

关于java - Spring MVC + Hibernate编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474285/

相关文章:

java - onBackPressed() 无法使 MainActivity 重新加载

带有字符串的 Java 7 switch 语句不起作用

java - 如果绘制 JOptionPane,则不会绘制我的面板的组件

java - 如何删除 hibernate 泛型中未经检查的分配警告

java - 如何在 Springboot 应用程序中捕获通过 POSTMAN 发送的 JSONObject?

java - @RequestBody 注释究竟是如何工作的以及它与 HttpMessageConverter 接口(interface)有何关系?

java - 为什么Java的FileInputStream read()带参数,而Oracle的文档却说不带参数?

database - 在hibernate中如何使用not in子句

java - 为什么在执行多对多查询时我的 Set 变量会抛出错误?

spring - 如何在 Spring Boot 中处理 HTTP OPTIONS 请求?