From a899e066f2944aea29e51bc281f4f30cda86cc9b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 11 May 2015 21:52:30 +0200 Subject: [PATCH] RequestResponseBodyMethodProcessor decorates ServletInputStream as well Issue: SPR-13014 --- .../RequestResponseBodyMethodProcessor.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java index 84f81d7138a..fccf6ee65d5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java @@ -21,7 +21,9 @@ import java.io.InputStream; import java.io.PushbackInputStream; import java.lang.reflect.Type; import java.util.List; +import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; import org.springframework.core.Conventions; import org.springframework.core.MethodParameter; @@ -137,7 +139,23 @@ public class RequestResponseBodyMethodProcessor extends AbstractMessageConverter else { pushbackInputStream.unread(b); } - inputMessage = new ServletServerHttpRequest(servletRequest) { + HttpServletRequest wrappedRequest = new HttpServletRequestWrapper(servletRequest) { + @Override + public ServletInputStream getInputStream() throws IOException { + return new ServletInputStream() { + @Override + public int read() throws IOException { + return pushbackInputStream.read(); + } + @Override + public void close() throws IOException { + super.close(); + pushbackInputStream.close(); + } + }; + } + }; + inputMessage = new ServletServerHttpRequest(wrappedRequest) { @Override public InputStream getBody() { // Form POST should not get here