|
@@ -0,0 +1,96 @@
|
|
|
+package com.tofly.fees.common.annotate.repeatableHttpServletRequest;
|
|
|
+
|
|
|
+import org.apache.commons.io.IOUtils;
|
|
|
+import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
|
+
|
|
|
+import javax.servlet.ReadListener;
|
|
|
+import javax.servlet.ServletException;
|
|
|
+import javax.servlet.ServletInputStream;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletRequestWrapper;
|
|
|
+import java.io.*;
|
|
|
+import java.nio.charset.Charset;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+ * @description:
|
|
|
+ * @Title: RepeatableHttpServletRequest
|
|
|
+ * @Package com.tofly.fees.common.annotate
|
|
|
+ * @Author 芝士汉堡
|
|
|
+ * @Date 2023-06-27 12:00
|
|
|
+ */
|
|
|
+public class RepeatableHttpServletRequest extends HttpServletRequestWrapper {
|
|
|
+ private final byte[] bytes;
|
|
|
+ private static final int BUFFER_SIZE = 4096;
|
|
|
+ public RepeatableHttpServletRequest(HttpServletRequest request) throws IOException, ServletException {
|
|
|
+ super(request);
|
|
|
+ bytes= IOUtils.toByteArray(request.getInputStream());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ServletInputStream getInputStream() throws IOException {
|
|
|
+ return new ServletInputStream() {
|
|
|
+ private int lastIndexRetrieved = -1;
|
|
|
+ private ReadListener readListener = null;
|
|
|
+ @Override
|
|
|
+ public boolean isFinished() {
|
|
|
+ return (lastIndexRetrieved == bytes.length-1);
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public boolean isReady() {
|
|
|
+
|
|
|
+
|
|
|
+ return isFinished();
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public void setReadListener(ReadListener readListener) {
|
|
|
+ this.readListener = readListener;
|
|
|
+ if (!isFinished()) {
|
|
|
+ try {
|
|
|
+ readListener.onDataAvailable();
|
|
|
+ } catch (IOException e) {
|
|
|
+ readListener.onError(e);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ readListener.onAllDataRead();
|
|
|
+ } catch (IOException e) {
|
|
|
+ readListener.onError(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public int read() throws IOException {
|
|
|
+ int i;
|
|
|
+ if (!isFinished()) {
|
|
|
+ i = bytes[lastIndexRetrieved+1];
|
|
|
+ lastIndexRetrieved++;
|
|
|
+ if (isFinished() && (readListener != null)) {
|
|
|
+ try {
|
|
|
+ readListener.onAllDataRead();
|
|
|
+ } catch (IOException ex) {
|
|
|
+ readListener.onError(ex);
|
|
|
+ throw ex;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return i;
|
|
|
+ } else {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public BufferedReader getReader() throws IOException {
|
|
|
+ ByteArrayInputStream is = new ByteArrayInputStream(bytes);
|
|
|
+ BufferedReader temp = new BufferedReader(new InputStreamReader(is));
|
|
|
+ return temp;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|