public abstract class HttpRequestHandlingEndpointSupport extends MessagingGatewaySupport implements OrderlyShutdownCapable
By default GET and POST requests are accepted via a supplied default instance
of RequestMapping
.
A GET request will generate a payload containing its 'parameterMap' while a POST
request will be converted to a Message payload according to the registered
HttpMessageConverter
s.
Several are registered by default, but the list can be explicitly set via
setMessageConverters(List)
.
To customize the mapping of request headers to the MessageHeaders, provide a
reference to a HeaderMapper<HttpHeaders>
implementation
to the setHeaderMapper(HeaderMapper)
method.
The behavior is "request/reply" by default. Pass false
to the constructor
to force send-only as opposed to sendAndReceive. Send-only means that as soon as
the Message is created and passed to the
request channel
,
a response will be generated. Subclasses determine how that response is generated
(e.g. simple status response or rendering a View).
In a request-reply scenario, the reply Message's payload will be extracted prior
to generating a response by default.
To have the entire serialized Message available for the response, switch the
extractReplyPayload
value to false
.
messagingTemplate
lifecycleCondition, lifecycleLock
EXPRESSION_PARSER, logger
Constructor and Description |
---|
HttpRequestHandlingEndpointSupport() |
HttpRequestHandlingEndpointSupport(boolean expectReply) |
Modifier and Type | Method and Description |
---|---|
int |
afterShutdown()
Called after normal shutdown of schedulers, executors etc,
and after the shutdown delay has elapsed, but before any
forced shutdown of any remaining active scheduler/executor
threads.Can optionally return the number of active messages
still in process.
|
int |
beforeShutdown()
Called before shutdown begins.
|
protected org.springframework.expression.spel.support.StandardEvaluationContext |
createEvaluationContext() |
protected org.springframework.messaging.Message<?> |
doHandleRequest(javax.servlet.http.HttpServletRequest servletRequest,
javax.servlet.http.HttpServletResponse servletResponse)
Handles the HTTP request by generating a Message and sending it to the request channel.
|
java.lang.String |
getComponentType()
Subclasses may implement this method to provide component type information.
|
CrossOrigin |
getCrossOrigin() |
protected java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> |
getMessageConverters() |
RequestMapping |
getRequestMapping() |
protected boolean |
isExpectReply() |
protected void |
onInit()
Locates the
MultipartResolver bean based on the default name defined by the
DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME constant if available. |
void |
setCrossOrigin(CrossOrigin crossOrigin)
Set the
CrossOrigin to permit cross origin requests for this endpoint. |
void |
setExtractReplyPayload(boolean extractReplyPayload)
Specify whether only the reply Message's payload should be passed in the response.
|
void |
setHeaderExpressions(java.util.Map<java.lang.String,org.springframework.expression.Expression> headerExpressions)
Specifies a Map of SpEL expressions to evaluate in order to generate the Message headers.
|
void |
setHeaderMapper(HeaderMapper<org.springframework.http.HttpHeaders> headerMapper)
Set the
HeaderMapper to use when mapping between HTTP headers and MessageHeaders. |
void |
setMergeWithDefaultConverters(boolean mergeWithDefaultConverters)
Flag which determines if the default converters should be available after
custom converters.
|
void |
setMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> messageConverters)
Set the message body converters to use.
|
void |
setMultipartResolver(org.springframework.web.multipart.MultipartResolver multipartResolver)
Specify the
MultipartResolver to use when checking requests. |
void |
setPayloadExpression(org.springframework.expression.Expression payloadExpression)
Specifies a SpEL expression to evaluate in order to generate the Message payload.
|
void |
setRequestMapping(RequestMapping requestMapping)
Set the
RequestMapping which allows you to specify a flexible RESTFul-mapping for this endpoint. |
void |
setRequestPayloadType(java.lang.Class<?> requestPayloadType)
Specify the type of payload to be generated when the inbound HTTP request content is read by the
HttpMessageConverter s. |
void |
setStatusCodeExpression(org.springframework.expression.Expression statusCodeExpression)
Specify the
Expression to resolve a status code for Response
to override the default '200 OK'. |
protected void |
setStatusCodeIfNeeded(org.springframework.http.server.ServletServerHttpResponse response) |
protected java.lang.Object |
setupResponseAndConvertReply(org.springframework.http.server.ServletServerHttpResponse response,
org.springframework.messaging.Message<?> replyMessage)
Converts the reply message to the appropriate HTTP reply object and
sets up the
ServletServerHttpResponse . |
buildErrorMessage, doStart, doStop, getErrorChannel, getErrorMessageAttributes, getManagedName, getManagedType, getMessageCount, getMessageCountLong, getReplyChannel, getRequestChannel, isCountsEnabled, isLoggingEnabled, receive, receiveMessage, reset, send, sendAndReceive, sendAndReceiveMessage, setCountsEnabled, setErrorChannel, setErrorChannelName, setErrorMessageStrategy, setLoggingEnabled, setManagedName, setManagedType, setReplyChannel, setReplyChannelName, setReplyMapper, setReplyTimeout, setRequestChannel, setRequestChannelName, setRequestMapper, setRequestTimeout, setShouldTrack
doStop, getPhase, isAutoStartup, isRunning, setAutoStartup, setPhase, setTaskScheduler, start, stop, stop
afterPropertiesSet, extractTypeIfPossible, getApplicationContext, getApplicationContextId, getBeanFactory, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getComponentName
public HttpRequestHandlingEndpointSupport()
public HttpRequestHandlingEndpointSupport(boolean expectReply)
protected boolean isExpectReply()
public void setPayloadExpression(org.springframework.expression.Expression payloadExpression)
#pathVariables
#requestParams
#requestAttributes
#requestHeaders
#matrixVariables
#cookies
payloadExpression
- The payload expression.public void setHeaderExpressions(java.util.Map<java.lang.String,org.springframework.expression.Expression> headerExpressions)
#pathVariables
#requestParams
#requestAttributes
#requestHeaders
#matrixVariables
#cookies
headerExpressions
- The header expressions.public void setMessageConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> messageConverters)
messageConverters
- The message converters.protected java.util.List<org.springframework.http.converter.HttpMessageConverter<?>> getMessageConverters()
public void setMergeWithDefaultConverters(boolean mergeWithDefaultConverters)
mergeWithDefaultConverters
- true to merge, false to replace.public void setHeaderMapper(HeaderMapper<org.springframework.http.HttpHeaders> headerMapper)
HeaderMapper
to use when mapping between HTTP headers and MessageHeaders.headerMapper
- The header mapper.public void setRequestMapping(RequestMapping requestMapping)
RequestMapping
which allows you to specify a flexible RESTFul-mapping for this endpoint.requestMapping
- The request mapping.public final RequestMapping getRequestMapping()
public void setCrossOrigin(CrossOrigin crossOrigin)
CrossOrigin
to permit cross origin requests for this endpoint.crossOrigin
- the CrossOrigin config.public CrossOrigin getCrossOrigin()
public void setRequestPayloadType(java.lang.Class<?> requestPayloadType)
HttpMessageConverter
s. By default this value is null which means at runtime any "text" Content-Type will
result in String while all others default to byte[].class
.requestPayloadType
- The payload type.public void setExtractReplyPayload(boolean extractReplyPayload)
extractReplyPayload
- true to extract the reply payload.public void setMultipartResolver(org.springframework.web.multipart.MultipartResolver multipartResolver)
MultipartResolver
to use when checking requests. If no resolver is provided, the
"multipartResolver" bean in the context will be used as a fallback. If that is not available either, this
endpoint will not support multipart requests.multipartResolver
- The multipart resolver.public void setStatusCodeExpression(org.springframework.expression.Expression statusCodeExpression)
Expression
to resolve a status code for Response
to override the default '200 OK'.
The statusCodeExpression
is applied only for the one-way <http:inbound-channel-adapter/>
or when no reply (timeout) is received for a gateway.
The <http:inbound-gateway/>
resolves an HttpStatus
from the
HttpHeaders.STATUS_CODE
reply Message
header.
statusCodeExpression
- The status code Expression.public java.lang.String getComponentType()
IntegrationObjectSupport
getComponentType
in interface NamedComponent
getComponentType
in class MessagingGatewaySupport
protected void onInit() throws java.lang.Exception
MultipartResolver
bean based on the default name defined by the
DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME
constant if available.
Sets up default converters if no converters set, or setMergeWithDefaultConverters(boolean)
was called with true after the converters were set.onInit
in class MessagingGatewaySupport
java.lang.Exception
- Any exception.protected final org.springframework.messaging.Message<?> doHandleRequest(javax.servlet.http.HttpServletRequest servletRequest, javax.servlet.http.HttpServletResponse servletResponse) throws java.io.IOException
servletRequest
- The servlet request.servletResponse
- The servlet response.java.io.IOException
- Any IOException.protected final java.lang.Object setupResponseAndConvertReply(org.springframework.http.server.ServletServerHttpResponse response, org.springframework.messaging.Message<?> replyMessage)
ServletServerHttpResponse
.response
- The ServletServerHttpResponse.replyMessage
- The reply message.extractReplyPayload
) otherwise the message.protected void setStatusCodeIfNeeded(org.springframework.http.server.ServletServerHttpResponse response)
protected org.springframework.expression.spel.support.StandardEvaluationContext createEvaluationContext()
public int beforeShutdown()
OrderlyShutdownCapable
beforeShutdown
in interface OrderlyShutdownCapable
public int afterShutdown()
OrderlyShutdownCapable
afterShutdown
in interface OrderlyShutdownCapable