package com.ruoyi.common.filter; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; /** * 解决服务器字符集问题 * * @author 文敏杰 * @date 2026/06/25 */ public class CustomRequestWrapper extends HttpServletRequestWrapper { private final byte[] body; public CustomRequestWrapper(HttpServletRequest request, String body) { super(request); this.body = body.getBytes(StandardCharsets.UTF_8); } @Override public ServletInputStream getInputStream() { ByteArrayInputStream bis = new ByteArrayInputStream(body); return new ServletInputStream() { @Override public int read() { return bis.read(); } @Override public boolean isFinished() { return bis.available() == 0; } @Override public boolean isReady() { return true; } @Override public void setReadListener(ReadListener readListener) { } }; } @Override public BufferedReader getReader() { return new BufferedReader( new InputStreamReader( getInputStream(), StandardCharsets.UTF_8 ) ); } @Override public String getCharacterEncoding() { return StandardCharsets.UTF_8.name(); } @Override public int getContentLength() { return body.length; } @Override public long getContentLengthLong() { return body.length; } }