Проблемы с кодировкой

 
 
 
Сообщения:134
Пишу простенькое Spring-приложение, в котором две формы. В первом вводишь текст, во втором задаешь для поиска регулярное выражение. Проблема в том, что если в в формы вводить кириллицу, то она возвращается в виде иероглифов: при (такого вида).
Конфигурационный класс:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
		 

		@Override
		protected Class<?>[] getServletConfigClasses() {
			return new Class[] { WebMvcConfig.class };
		}

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

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

Настройки Web:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "ru.vallball.regex01"})
public class WebMvcConfig implements WebMvcConfigurer {
	@Autowired
	   private ApplicationContext applicationContext;


	 @Bean
	   public SpringResourceTemplateResolver templateResolver() {
	      SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
	      templateResolver.setApplicationContext(this.applicationContext);
	      templateResolver.setPrefix("/WEB-INF/views/");
	      templateResolver.setSuffix(".html");
	      templateResolver.setCharacterEncoding("UTF-8");
	      
	      return templateResolver;
	   }

	   /*
	    * STEP 2 - Create SpringTemplateEngine
	    * */
	   @Bean
	   public SpringTemplateEngine templateEngine() {
	      SpringTemplateEngine templateEngine = new SpringTemplateEngine();
	      templateEngine.setTemplateResolver(templateResolver());
	      templateEngine.setEnableSpringELCompiler(true);
	      return templateEngine;
	   }

	   /*
	    * STEP 3 - Register ThymeleafViewResolver
	    * */
	   @Bean
	   public ThymeleafViewResolver viewResolver(){
	       ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
	       viewResolver.setTemplateEngine(templateEngine());
	       viewResolver.setCharacterEncoding("UTF-8");
	       viewResolver.setContentType("text/html; charset=UTF-8");
	       return viewResolver;
	   }

	}

Контроллер:
@Controller
public class MyController {
	@RequestMapping("/")
    public String show() {
		return "index";
    }
	@PostMapping("/result")
    public String result(@RequestParam("text") String text,@RequestParam("regex") String regex,
    		Model model) {
		System.out.println(text);
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(text);
	
		boolean res = matcher.find();
		String matcStr = matcher.group();
		model.addAttribute("matcStr", matcStr);
		model.addAttribute("res", res);
		return "result";
}
}

Два html файла
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Регулярные выражения</title>

</head>
<body>

<form method="post" action="#" th:action="@{/result}">
  <p><b>Введите текст:</b><br>
  <textarea name="text" cols="50" rows="6"></textarea></p>
  </p>
  
  <p><b>Введите регулярное выражение:</b><br>
   <input type="text" name="regex" size="40">
  </p>
    <p><input type="submit" value="Отправить">
   </form>

</body>
</html>


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Результат проверки</title>
</head>
<body>
	<p>Результат проверки</p>
	
	<p th:if="${res}" th:text="${matcStr}">Test</p>
</body>
</html>


Я так понял, что нужно применять фильтр, меняющий кодировку, но до конца так проблему не могу осознать и решить.
 
 
Сообщения:9773
Происходит это потому что Servlet'ы не понимают в какой кодировке приходят данные. Отгадывают неверно и данные в сервлете вычитываются неверно из HTTP запроса.
    <filter>
        <filter-name>encoding-filter</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>
    </filter>
    <filter-mapping>
        <filter-name>encoding-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
Изменен:14 янв 2019 17:53
 
 
Сообщения:134
А без web.xml можно тут обойтись? Я его в проекте не использую.
А так да, это помогло.
Изменен:15 янв 2019 05:15
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет