700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Java】 java | springboot中文乱码 | post请求参数乱码 | 解决表单参数中文乱码

【Java】 java | springboot中文乱码 | post请求参数乱码 | 解决表单参数中文乱码

时间:2022-01-25 06:39:02

相关推荐

【Java】 java | springboot中文乱码 | post请求参数乱码 | 解决表单参数中文乱码

一、说明

1、springboot版本2.2.13.RELEASE

2、本来是没有乱码,不知道什么时候增加了其他的依赖,即dependency,就导致乱码了

3、配置server.tomcat.uri-encoding=UTF-8,无效

4、配置spring.http.encoding.charset=UTF-8,无效

5、解决:自定义filter处理表单参数

6、我的情况是真神奇,有的接口是utf8,有的接口是8859;恶心坏了;改造了下代码,临时解决下吧

二、copy复制

package com.ruoyi.hg.filter;import cn.hutool.core.util.ObjectUtil;import mon.utils.text.CharsetKit;import org.springframework.core.annotation.Order;import org.ponent;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)@Componentpublic 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);}@Overrideprotected void doFilterInternal(final HttpServletRequest request, HttpServletResponse response,FilterChain filterChain) throws ServletException, IOException {// 设置request和response的编码格式(解决post请求乱码)// 对request中的参数进行编码格式的转换(解决get请求乱码)filterChain.doFilter(new HttpServletRequestWrapper(request) {@Overridepublic String getParameter(String name) {String value = super.getParameter(name);return check8859(value);}@Overridepublic 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;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。