Spring Boot 接收GET请求中文乱码,项目统一编码UTF-8,第三方回调通知GET请求GBK编码

百度各种方法都试了,没有一点效果,实际上在进controller之前已经乱码了,怎么URLDecoder.decode都没用,怎么getBytes修改编码都没有用

直接针对某个请求做编码处理

解决方案如下:

package com.yctnet.electronicticket.config;

import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.RequestFacade;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.*;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.charset.Charset;

/**
* 针对第三方请求我方服务器编码格式不一致的问题
*/
@Configuration
public class GBKFilterConfig {
@Bean
public FilterRegistrationBean gbkFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setDispatcherTypes(DispatcherType.REQUEST);
registration.setFilter(new Filter() {
@Override
public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
RequestFacade req = (RequestFacade) request;
Class clazz = req.getClass();
try {
Field field = clazz.getDeclaredField("request");
field.setAccessible(true);
Request r = (Request) field.get(req);
org.apache.coyote.Request p = r.getCoyoteRequest();
p.getParameters().setQueryStringCharset(Charset.forName("GBK"));
chain.doFilter(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void destroy() {
}
});
// 针对处理的请求
registration.addUrlPatterns("/v1/api/ruipu/notify");
registration.addUrlPatterns("/v1/api/diandian/order");
registration.setName("gbkFilter");
registration.setOrder(Integer.MIN_VALUE);
return registration;
}
}
posted @ 2021-01-05 15:51  嗯哼先生  阅读(1881)  评论(0)    收藏  举报