2016-05-18 5 views
0

Entwicklungsumgebung:Hibernate Frühling kodieren charater falsch eingestellt [UTF-8]

  • Frühling 4.2x
  • Hibernate 4.3.11
  • Tomcat 8 Server
  • MySQL 5,4

Vor der Umstellung auf Hibernate war das Einfügen, Abrufen und Anzeigen der Zeichen kein Problem. Aber nachdem ich die Änderung in meinem DAO vorgenommen habe, um Hibernate seltsam zu benutzen, kann ich nicht das korrekte Zeichen in die MySQL DB einfügen.

Ich habe darauf geachtet, dass MySQL-Schema in der Tat UTF-8-Zeichensatz durch Abfrage speichern kann "INSERT INTO spring_normalizeoffers (text, users_username) VALUES ('Olm', 'lalalal');". Die Ausgabe auf der index.jsp ist korrekt.

Ich veränderte mein Hibernate Config

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
       <prop key="hibernate.connection.useUnicode">true</prop><!-- added --> 
       <prop key="hibernate.connection.characterEncoding">UTF-8</prop><!-- added --> 
       <prop key="hibernate.connection.charSet">UTF-8</prop><!-- added --> 

      </props> 
     </property> 

     <property name="packagesToScan"> 
      <list> 
       <value>com.caveofprogramming.pring.web.dao</value> 
      </list> 
     </property> 
    </bean> 

Dies scheint nicht

Checkliste zu arbeiten:

  1. DB-Schema auf UTF-8 gesetzt ist - utf8_unicode_ci.
  2. Hibernat Config charSet zu UTF-8 hinzufügen.
  3. jsp Seite language = "java" content = "text/html; charset = UTF-8" pageencoding = "UTF-8
  4. Ich habe auch Filter wie dieser Beitrag vorgeschlagen hinzugefügt ... Spring MVC UTF-8 Encoding

* Update * das ist meine Bohnen und DAO

Formular

<sf:form method="POST" action="${pageContext.request.contextPath}/docreate" commandName="offer"> 
    <sf:input type="text" path="id" name="id" readonly="true" /> 
    <label for="text">Text</label> 
    <sf:textarea id="text" name="text" row="3" path="text"></sf:textarea> 
    <sf:errors path="text" cssClass="error"></sf:errors> 
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> 
    <input type="submit" value="Submit"> 

</sf:form> 

Angebot

@Entity 
@Table(name="offers") 
public class Offer{ 
    @Id 
    private int id; 
    private String text; 

    getIn(){} 
    ..... 
} 

OfferDao

public class OfferDao{ 
    @Autowired 
    private SessionFactory sessionFactory; 

    public Session currentSession(){ 
    return sessionFactory.getCurrentSession(); 
    } 

    public boolean create(Offer offer){ 
    int hiberReturn =(int) currentSession().save(offer); 

    return hiberReturn >= 0; 
    } 
} 

Wer viel sehr geschätzt wird helfen ... wirklich .. vielen vielen Dank

Antwort

1

ich dies tatsächlich zufällig festgelegt, wenn ich mit nur einer einfachen Formulareingabe eines weiteres kleinere Web-App erstellt.Für diejenigen, die das gleiche Problem haben, gehen Sie durch die Checkliste oben und stellen Sie sicher, dass Sie alles haben.

Die wichtigste ist sicherzustellen, dass der Zeichencodierungsfilter der erste Filter auf web.xml Grund sein muss ..... Ich kenne den Grund nicht, also wenn Sie ... Bitte hinterlassen Sie einen Kommentar unter

WICHTIG !!! Der erste Filter auf web.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> 
2

für Java (JDBC):

?useUnicode=yes&characterEncoding=UTF-8 in the getConnection() call. 

Für Hikari (vielleicht):

spring.jpa.properties.hibernate.connection.characterEncoding=utf-8 
spring.jpa.properties.hibernate.connection.CharSet=utf-8 
spring.jpa.properties.hibernate.connection.useUnicode=true 

Frühjahr/Hibernate-Filter:

<form accept-charset="UTF-8"> 

Spring/Hibernate: <property name="url" 
    value="jdbc:mysql://localhost:3306/miniprojetjee?useUnicode=true 
      &connectionCollation=utf8_general_ci 
      &characterSetResults=utf8&characterEncoding=utf-8"/> 

"Spring": @RequestMapping(value = "/getRegion2", 
    produces={"application/json; charset=UTF-8"},method = RequestMethod.GET) 

Siehe auch: https://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-db-configuration-hibernate.html

+0

Danke, das ich tat dies ... aber es ist immer noch nicht die richtigen Zeichen in –

+0

zum MySQL-Speichern Bitte geben Sie SELECT col, HEX (col) FROM ... 'für einige "falsche" Zelle. Dies sollte bei der weiteren Diagnose helfen. –

+0

Hummmm ich habe meine Frage aktualisiert, bitte sieh sie dir an ... meine Bohne und Dao ist ganz einfach ... Danke nochmal –