SPR-6861 - enable overwriting of createHttpInputMessage and createHttpOutputMessage in AnnotationMethodHandlerAdapter
This commit is contained in:
parent
bc7679f9fc
commit
63dc53a5ea
|
|
@ -457,6 +457,32 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
return new ServletRequestDataBinder(target, objectName);
|
return new ServletRequestDataBinder(target, objectName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template method for creating a new HttpInputMessage instance.
|
||||||
|
* <p>The default implementation creates a standard {@link ServletServerHttpRequest}.
|
||||||
|
* This can be overridden for custom {@code HttpInputMessage} implementations
|
||||||
|
* @param servletRequest current HTTP request
|
||||||
|
* @return the HttpInputMessage instance to use
|
||||||
|
* @throws Exception in case of errors
|
||||||
|
*/
|
||||||
|
protected HttpInputMessage createHttpInputMessage(HttpServletRequest servletRequest) throws Exception {
|
||||||
|
|
||||||
|
return new ServletServerHttpRequest(servletRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template method for creating a new HttpOuputMessage instance.
|
||||||
|
* <p>The default implementation creates a standard {@link ServletServerHttpResponse}.
|
||||||
|
* This can be overridden for custom {@code HttpOutputMessage} implementations
|
||||||
|
* @param servletResponse current HTTP response
|
||||||
|
* @return the HttpInputMessage instance to use
|
||||||
|
* @throws Exception in case of errors
|
||||||
|
*/
|
||||||
|
protected HttpOutputMessage createHttpOutputMessage(HttpServletResponse servletResponse) throws Exception {
|
||||||
|
|
||||||
|
return new ServletServerHttpResponse(servletResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Servlet-specific subclass of {@link HandlerMethodResolver}.
|
* Servlet-specific subclass of {@link HandlerMethodResolver}.
|
||||||
|
|
@ -687,7 +713,13 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
@Override
|
@Override
|
||||||
protected HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest) throws Exception {
|
protected HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest) throws Exception {
|
||||||
HttpServletRequest servletRequest = (HttpServletRequest) webRequest.getNativeRequest();
|
HttpServletRequest servletRequest = (HttpServletRequest) webRequest.getNativeRequest();
|
||||||
return new ServletServerHttpRequest(servletRequest);
|
return AnnotationMethodHandlerAdapter.this.createHttpInputMessage(servletRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected HttpOutputMessage createHttpOutputMessage(NativeWebRequest webRequest) throws Exception {
|
||||||
|
HttpServletResponse servletResponse = (HttpServletResponse) webRequest.getNativeResponse();
|
||||||
|
return AnnotationMethodHandlerAdapter.this.createHttpOutputMessage(servletResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -848,24 +880,24 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleResponseBody(Object returnValue, ServletWebRequest webRequest)
|
private void handleResponseBody(Object returnValue, ServletWebRequest webRequest)
|
||||||
throws ServletException, IOException {
|
throws Exception {
|
||||||
if (returnValue == null) {
|
if (returnValue == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
|
HttpInputMessage inputMessage = createHttpInputMessage(webRequest);
|
||||||
HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
|
HttpOutputMessage outputMessage = createHttpOutputMessage(webRequest);
|
||||||
|
|
||||||
writeWithMessageConverters(returnValue, inputMessage, outputMessage);
|
writeWithMessageConverters(returnValue, inputMessage, outputMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleHttpEntityResponse(HttpEntity<?> responseEntity, ServletWebRequest webRequest)
|
private void handleHttpEntityResponse(HttpEntity<?> responseEntity, ServletWebRequest webRequest)
|
||||||
throws ServletException, IOException {
|
throws Exception {
|
||||||
if (responseEntity == null) {
|
if (responseEntity == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
|
HttpInputMessage inputMessage = createHttpInputMessage(webRequest);
|
||||||
HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
|
HttpOutputMessage outputMessage = createHttpOutputMessage(webRequest);
|
||||||
|
|
||||||
HttpHeaders entityHeaders = responseEntity.getHeaders();
|
HttpHeaders entityHeaders = responseEntity.getHeaders();
|
||||||
if (!entityHeaders.isEmpty()) {
|
if (!entityHeaders.isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ import org.springframework.http.HttpEntity;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpInputMessage;
|
import org.springframework.http.HttpInputMessage;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.HttpOutputMessage;
|
||||||
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.http.converter.HttpMessageConverter;
|
||||||
import org.springframework.ui.ExtendedModelMap;
|
import org.springframework.ui.ExtendedModelMap;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
|
|
@ -802,12 +803,20 @@ public class HandlerMethodInvoker {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a {@link HttpInputMessage} for the given {@link NativeWebRequest}.
|
* Return a {@link HttpInputMessage} for the given {@link NativeWebRequest}.
|
||||||
* <p>Throws an UnsupportedOperationException by default.
|
* <p>Throws an UnsupportedOperation1Exception by default.
|
||||||
*/
|
*/
|
||||||
protected HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest) throws Exception {
|
protected HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest) throws Exception {
|
||||||
throw new UnsupportedOperationException("@RequestBody not supported");
|
throw new UnsupportedOperationException("@RequestBody not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a {@link HttpOutputMessage} for the given {@link NativeWebRequest}.
|
||||||
|
* <p>Throws an UnsupportedOperationException by default.
|
||||||
|
*/
|
||||||
|
protected HttpOutputMessage createHttpOutputMessage(NativeWebRequest webRequest) throws Exception {
|
||||||
|
throw new UnsupportedOperationException("@ResponseBody not supported");
|
||||||
|
}
|
||||||
|
|
||||||
protected String parseDefaultValueAttribute(String value) {
|
protected String parseDefaultValueAttribute(String value) {
|
||||||
return (ValueConstants.DEFAULT_NONE.equals(value) ? null : value);
|
return (ValueConstants.DEFAULT_NONE.equals(value) ? null : value);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue