2016-11-21 6 views
1

Hibernateでフォームからデータを保存する際に問題があります。基本的にエンコーディングが間違っているため、データベースに保存されています。これは私がこれまでに作成した構成である。エンティティの保存中にSpring/Hibernateのエンコーディングエラーが発生しました

applicationContext.xmlを中

<filter> 
    <filter-name>SetCharacterEncodingFilter</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>SetCharacterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

web.xmlの

<property name="url" value="jdbc:postgresql://localhost:5432/mydb?characterEncoding=UTF-8" /> 

(両方のパターン 'UTF-8' と 'UTF8' を試してみました)。.. 。

<property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</prop> 
       <prop key="hibernate.connection.CharSet">utf8</prop> 
       <prop key="hibernate.connection.characterEncoding">utf8</prop> 
       <prop key="hibernate.cache.use_query_cache">true</prop> 
       <prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.region.factory_class"> 
        org.hibernate.cache.ehcache.EhCacheRegionFactory 
       </prop> 
       <prop key="hibernate.connection.useUnicode">true</prop> 
       <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop> 
       <prop key="show_sql">true</prop> 

       <prop key="hibernate.c3p0.min_size">5</prop> 
       <prop key="hibernate.c3p0.max_size">20</prop> 
       <prop key="hibernate.c3p0.timeout">300</prop> 
       <prop key="hibernate.c3p0.max_statements">50</prop> 
       <prop key="hibernate.c3p0.idle_test_period">3000</prop> 
      </props> 
</property> 

のpom.xml

<properties> 
     <spring.version>4.1.2.RELEASE</spring.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

データベース、jspファイル、プロジェクトにもut8エンコーディングがあります。また、server.xmlのコネクタ設定にURIEncoding = "UTF-8"を追加しました。何を追加する必要がありますか、何が間違っていますか?

+0

からのコメントに基づいて

@Order(1) public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer { @Override protected void beforeSpringSecurityFilterChain(ServletContext servletContext) { FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter()); characterEncodingFilter.setInitParameter("encoding", "UTF-8"); characterEncodingFilter.setInitParameter("forceEncoding", "true"); characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*"); } } 

。列のエンコーディングをチェックしましたか? –

+0

私はpostgres 9を使用しています。未加工のクエリで正しい値を挿入して後で正しく表示することができます。アプリケーションフォームから何かを保存しようとした後に問題が発生します。@ValidアノテーションとBindingResultオブジェクトをアクションの引数データを保存する責任があります – Markownikow

答えて

0

ブレークポイントを設定し、バイト(UTF-8)からUnicodeへのエンコードが正しく行われたかどうかを確認できます。 次に行うべきことはデータベース/テーブルの照合を確認してください。 照合を指定するデータベース/テーブルを作成するときに、文字セット(通常はインストール中にデフォルトを選択します)に相当するものを指定します。保存した文字をサポートしていない場合は、ガベージ・アウトが発生する可能性があります。

+0

データがすでにコントローラ内で破損しているため、エンティティの値をデバッグ/プリントしてから、すでに間違っています。リクエストパラメータと同じですが、HttpServletRequestオブジェクトのgetParameter( "name")を呼び出すと、私はsetCharacterEncoding( "UTF-8")と呼んでいましたが、それは影響を受けましたが、paramの値はまだ間違っています。 – Markownikow

+0

URLにフォームデータまたはエンコードデータをポストしていますか?通常、フォームデータは、フォームが存在するページと同じエンコーディングで送信されます。そうでない場合は、accept-charsetを使用して設定できます。 URLパラメータはURLエンコードされている必要がありますが、これは基本的に16進エンコードであるため、サーブレットコンテナにURIの処理方法を伝える必要があります。 Tomcatでは、これはxml属性URIEncoding = "UTF-8"を使用してserver.xmlの定義で行われます。 –

+0

あなたの提案をありがとう、私はすでにaccept-charset属性(jspフォームタグとそのacceptCharset = "UTF-8"も)を試しました:<%@ page pageEncoding = "UTF-8"%>、URIEncodingを追加server.xmlは私が試した最初のものの1つでしたが、残念ながらそれは問題を解決しませんでした – Markownikow

関連する問題