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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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}.
|
||||
|
|
@ -687,7 +713,13 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
|||
@Override
|
||||
protected HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest) throws Exception {
|
||||
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
|
||||
|
|
@ -848,24 +880,24 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
|||
}
|
||||
|
||||
private void handleResponseBody(Object returnValue, ServletWebRequest webRequest)
|
||||
throws ServletException, IOException {
|
||||
throws Exception {
|
||||
if (returnValue == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
|
||||
HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
|
||||
HttpInputMessage inputMessage = createHttpInputMessage(webRequest);
|
||||
HttpOutputMessage outputMessage = createHttpOutputMessage(webRequest);
|
||||
|
||||
writeWithMessageConverters(returnValue, inputMessage, outputMessage);
|
||||
}
|
||||
|
||||
private void handleHttpEntityResponse(HttpEntity<?> responseEntity, ServletWebRequest webRequest)
|
||||
throws ServletException, IOException {
|
||||
throws Exception {
|
||||
if (responseEntity == null) {
|
||||
return;
|
||||
}
|
||||
HttpInputMessage inputMessage = new ServletServerHttpRequest(webRequest.getRequest());
|
||||
HttpOutputMessage outputMessage = new ServletServerHttpResponse(webRequest.getResponse());
|
||||
HttpInputMessage inputMessage = createHttpInputMessage(webRequest);
|
||||
HttpOutputMessage outputMessage = createHttpOutputMessage(webRequest);
|
||||
|
||||
HttpHeaders entityHeaders = responseEntity.getHeaders();
|
||||
if (!entityHeaders.isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import org.springframework.http.HttpEntity;
|
|||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpInputMessage;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.HttpOutputMessage;
|
||||
import org.springframework.http.converter.HttpMessageConverter;
|
||||
import org.springframework.ui.ExtendedModelMap;
|
||||
import org.springframework.ui.Model;
|
||||
|
|
@ -802,12 +803,20 @@ public class HandlerMethodInvoker {
|
|||
|
||||
/**
|
||||
* 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 {
|
||||
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) {
|
||||
return (ValueConstants.DEFAULT_NONE.equals(value) ? null : value);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue