有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

POST方法Spring和Thymeleaf中的java编码问题

我制作了一个简单的表单,用户输入一个名称,然后将该名称存储在数据库中。我正在使用Spring MVCThymeleaf。我的数据库是MySQL。问题发生在我试图输入非拉丁字符时。 enter image description here

在将非拉丁name存储到数据库中后,我试图在网页上显示它,但我得到的不是西里尔字母,而是像这样的奇怪字符:

ИмÑ

  • 我确信数据库中的编码是正确的,因为当我试图 使用MySQL Workbench存储非拉丁名称。编码为 对
  • ThymileAF编码也被设置为UTF-8。当我输入 例如,在这样的标记中:

<h1> Заголовок </h1>

我已经试过了:

  • 在html文件中添加这一行:<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  • form标记中添加此属性:<form accept-charset="UTF-8" ...

但什么都不管用。我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    我找了很多,终于找到了解决办法

    -我宁愿称之为变通方法而不是解决方案的第一个方法:

        @PostMapping
        public String create(@RequestParam("name") String name, @RequestParam("age") int age) {      
    
            byte[] bytes = name.getBytes(StandardCharsets.ISO_8859_1);
            name = new String(bytes, StandardCharsets.UTF_8); // now "name" contains characters in the correct encoding
    
            ...
        }
    

    -在我看来,第二种解决方案看起来要好得多:
    首先,创建一个Filter类,并在其中设置POST请求的编码:

       public class RequestFilter extends HttpFilter {
            @Override
            protected void doFilter(HttpServletRequest request, HttpServletResponse response,
                                    FilterChain chain) throws IOException, ServletException
            {
                request.setCharacterEncoding("UTF-8");
                chain.doFilter(request, response);
            }
        }
    

    然后你应该在web.xml中注册一个Filter

     <filter>
        <filter-name>filter_nane</filter-name>
        <filter-class>class_path_to_filter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>filter_nane</filter-name>
        <url-pattern>/*</url-pattern> 
      </filter-mapping>