SpringMVC-乱码问题

乱码问题

1. 使用原生filter解决

1. 前端jsp

<%--
  Created by IntelliJ IDEA.
  User: Wang
  Date: 2020/9/9
  Time: 9:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="/e/t1" method="post">
    <input type="text" name="name">
    <input type="submit">
</form>

</body>
</html>

2. 编写controller

package com.wang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class EncodingController {

    //过滤器解决乱码
    @PostMapping("/e/t1")
    public String test(String name, Model model) {

        System.out.println(name);
        model.addAttribute("msg", name);

        //返回的地址为转发的地址
        return "test";
    }
}

3. 编写过滤器

package com.wang.filter;

import javax.servlet.*;
import java.io.IOException;

public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");

        filterChain.doFilter(servletRequest, servletResponse);

    }

    @Override
    public void destroy() {

    }
}

4. 注册过滤器

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.wang.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注意, 此处url-pattern要写为/*, 这是由于要拦截所有的东西

spring配置中则写/, 这是由于如果拦截了.jsp, 会继续将jsp中的跳转的url继续拦截, 当找不到controller时会报404错误!

2. 使用SpringMVC提供的过滤器实现

在web.xml中配置

<!--配置SpringMVC的乱码过滤-->
<filter>
    <filter-name>encoding</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-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注意, 此处url-pattern要写为/*, 这是由于要拦截所有的东西

原文地址:https://www.cnblogs.com/wang-sky/p/13637347.html