简体   繁体   中英

Spring Hibernate unable save data with polish characters (UTF-8 issue)

I know that it's popular issue but I research whole stackoverflow and I couldn't find solution for my problem or exisiting solution did not work.

My application uses Spring and Hibernate. Polish letters are changing to questions marks after persist to database.

My code: SecurityConfig.class

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private UserService userService;

@Override
public void configure(WebSecurity web) throws Exception {
    web.debug(false);
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    http.addFilterBefore(filter,CsrfFilter.class);
    System.out.println("Jestem w WebSecurityConfigurerAdapter");

 ...
}

AppConfig.java

@EnableWebMvc
@Configuration
@ComponentScan({ "com.everydayhabits.*" })
@EnableTransactionManagement
@PropertySource("classpath:persistence-mysql.properties")
@Import({SecurityConfig.class})
public class AppConfig implements WebMvcConfigurer {

...

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setContentType("text/html;charset=UTF-8");
        return viewResolver;
    }

SpringMvcInitializer.class

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppConfig.class, SecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

SpringSecurityInitializer.class

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        super.beforeSpringSecurityFilterChain(servletContext);

        FilterRegistration.Dynamic characterEncodingFilter;
        characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "UTF-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
    }

}

pom.xml

...
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                        <resourceEncoding>${project.build.sourceEncoding}</resourceEncoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...

Apache server.xml

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

myjsppage.jsp

...
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
...

Has I missed anything to enable UTF-8 to my application? Does anyone has similar problem? Thanks in advance!

Can you try changes to your SpringSecurityInitializer like below:-

@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
    super.beforeSpringSecurityFilterChain(servletContext);

    FilterRegistration.Dynamic characterEncodingFilter;
    CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
    encodingFilter.setEncoding("UTF-8");
    encodingFilter.setForceEncoding(true);
    characterEncodingFilter = servletContext.addFilter("encodingFilter", encodingFilter);
    characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM