Bootstrap

Spring Mvc 关于请求 / 响应 中文数据乱码的处理方法

一.关于请求中文参数的乱码问题

1.找到 SpringMvcIoc容器类,重写 getServletFilters() 方法;

大概意思是设置了一个字符过滤器,然后将 数据的编码进行转换, 转换成 UTF-8
package com.Spring.config;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

public class springMvcIoc extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{springConfig.class};
    }

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

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

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[]{characterEncodingFilter};
    }
}

二.Mvc 处理响应中文数据乱码的问题;

只需要在Controller的类中 设置好 @requestMapping 注解的 produces 属性;

produces 属性可以用于设置 响应返回值 类型, 以及设置 响应数据 编码字符集;

所以只需要利用其第二个功能, 就可以实现解决乱码问题;

下面的 produces 属性添加在 controller 类的 @requestMapping 注解上,意思是给此类中所有 Servlet 方法设置 这个produces 属性;

package com.Spring.controller;


import com.Spring.pojo.student;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.Spring.server.studentServer;

import java.util.List;

@RestController
@ResponseBody
@RequestMapping(value="/student",produces = "text/html;charset=utf-8")
public class studentController {
    @Autowired
    private studentServer studentServer;

    @GetMapping
    public List<student> get(){
        List<student> students = this.studentServer.selectAll(null);
        return students;
    }

}

;