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.*;
|
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;
|
}
|
}
|