[Java] java | springboot Chinese garbled characters | post request parameter garbled characters | solve form parameter Chinese garbled characters

1. Description

1. Springboot version 2.2.13.RELEASE
2. Originally there was no garbled characters. I don’t know when other dependencies, namely dependencies, were added, which resulted in garbled characters.
3. Configure server.tomcat.uri-encoding=UTF-8, invalid
4 , configure spring.http.encoding.charset=UTF-8, invalid
5, solution: custom filter processing form parameters
6, my situation is really amazing, some interfaces are utf8, some interfaces are 8859; disgusting; Modify the code, temporarily solve it

Two, copy copy

package com.ruoyi.hg.filter;

import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.utils.text.CharsetKit;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@Order(Integer.MIN_VALUE)
@Component
public class EncodingFilter extends OncePerRequestFilter {
    private String encoding;

    private boolean forceEncoding = false;

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public void setForceEncoding(boolean forceEncoding) {
        this.forceEncoding = forceEncoding;
    }

    public String filter(String input) {
        return CharsetKit.convert(input, CharsetKit.ISO_8859_1, CharsetKit.UTF_8);
    }

    @Override
    protected void doFilterInternal(final HttpServletRequest request, HttpServletResponse response,
            FilterChain filterChain) throws ServletException, IOException {
        // 设置request和response的编码格式(解决post请求乱码)

        // 对request中的参数进行编码格式的转换(解决get请求乱码)
        filterChain.doFilter(new HttpServletRequestWrapper(request) {
            @Override
            public String getParameter(String name) {
                String value = super.getParameter(name);
                return check8859(value);
            }

            @Override
            public String[] getParameterValues(String name) {
                String[] values = super.getParameterValues(name);
                if (values == null) {
                    return null;
                }
                String value = null;
                for (int i = 0; i < values.length; i++) {
                    value = values[i];
                    // 不包含,说明转成功了
                    values[i] = check8859(value);
                }
                return values;
            }
        }, response);
    }

    String check8859(String val) {
        if (ObjectUtil.isNull(val)) {
            return val;
        }
        String afterValue = filter(val);
        if (afterValue.contains("?")) {
            // utf8文字,强行通过 ISO_8859_1 -> utf8,会包含问好
            return val;
        }
        // 不包含,说明转成功了
        return afterValue;
    }
}

Guess you like

Origin blog.csdn.net/myloverisxin/article/details/129479449