Class NettyHttpRequest<T>
- Type Parameters:
T
- The type
- All Implemented Interfaces:
AttributeHolder
,MutableAttributeHolder
,FullHttpRequest<T>
,HttpMessage<T>
,HttpRequest<T>
,NettyHttpRequestBuilder
,PushCapableHttpRequest<T>
,ServerHttpRequest<T>
,io.netty.util.AttributeMap
HttpRequest
instance.- Since:
- 1.0
- Author:
- Graeme Rocher
-
Field Summary
Modifier and TypeFieldDescriptionONLY for NettyBodyAnnotationBinder use.Fields inherited from class io.micronaut.http.netty.AbstractNettyHttpRequest
conversionService, httpMethod, httpMethodName, nettyRequest, unvalidatedUrl
Fields inherited from interface io.micronaut.http.HttpRequest
SCHEME_HTTP, SCHEME_HTTPS
-
Constructor Summary
ConstructorDescriptionNettyHttpRequest
(io.netty.handler.codec.http.HttpRequest nettyRequest, CloseableByteBody body, io.netty.channel.ChannelHandlerContext ctx, ConversionService environment, HttpServerConfiguration serverConfiguration) -
Method Summary
Modifier and TypeMethodDescriptionfinal void
addRouteWaitsFor
(ExecutionFlow<?> executionFlow) Get the contents of this request as a buffer.final ByteBody
byteBody()
Get the bytes of the body.Directly convert this request body to aByteBody
, if possible.ByteBuffer<?>
contents()
Get the raw body of this request.final FormRouteCompleter
getAttribute
(CharSequence name) Obtain the value of an attribute on the HTTP method.AMutableConvertibleValues
of the attributes for this HTTP message.getBody()
<T1> Optional<T1>
getBody
(ArgumentConversionContext<T1> conversionContext) Return the body, will use the provided conversion context if needed.<T1> Optional<T1>
Return the body as the given type.io.netty.channel.ChannelHandlerContext
long
The request or response content type.io.netty.handler.codec.http.HttpRequest
Get the origin header.final ExecutionFlow<?>
Get the SSL session used for the connection to the client, if available.final boolean
protected Charset
initCharset
(Charset characterEncoding) final boolean
boolean
isFull()
Shortcut forcontents() != null
.boolean
isSecure()
boolean
Check whether HTTP2 server push is supported by the remote client.mutate()
Returns a new request object that allows mutation.void
release()
Release and cleanup resources.protected void
releaseIfNecessary
(Object value) serverPush
(@NonNull HttpRequest<?> request) Initiate a HTTP2 server push for the given request.setAttribute
(CharSequence name, Object value) Sets an attribute on the message.final void
setLegacyBody
(Object legacyBody) io.netty.handler.codec.http.HttpRequest
Deprecated.Optional<io.netty.handler.codec.http.HttpRequest>
Directly convert this request to netty, including the body, if possible.io.netty.handler.codec.http.HttpRequest
Convert this request to a netty request without the body.toString()
Methods inherited from class io.micronaut.http.netty.AbstractNettyHttpRequest
createDecoder, getCharacterEncoding, getMethod, getMethodName, getNettyRequest, getParameters, getPath, getUri, isStream, toFullHttpRequest, toStreamHttpRequest
Methods inherited from class io.netty.util.DefaultAttributeMap
attr, hasAttr
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface io.micronaut.core.attr.AttributeHolder
getAttribute
Methods inherited from interface io.micronaut.http.HttpMessage
getBody, getBodyWriter, getCharacterEncoding
Methods inherited from interface io.micronaut.http.HttpRequest
accept, getCertificate, getLocale, getMethod, getMethodName, getParameters, getPath, getUri, getUserPrincipal, getUserPrincipal, toMutableRequest
Methods inherited from interface io.micronaut.core.attr.MutableAttributeHolder
removeAttribute
-
Field Details
-
convertibleBody
ONLY for NettyBodyAnnotationBinder use.
-
-
Constructor Details
-
NettyHttpRequest
public NettyHttpRequest(io.netty.handler.codec.http.HttpRequest nettyRequest, CloseableByteBody body, io.netty.channel.ChannelHandlerContext ctx, ConversionService environment, HttpServerConfiguration serverConfiguration) throws IllegalArgumentException - Parameters:
nettyRequest
- TheHttpRequest
body
- The request bodyctx
- TheChannelHandlerContext
environment
- The EnvironmentserverConfiguration
- TheHttpServerConfiguration
- Throws:
IllegalArgumentException
- When the request URI is invalid
-
-
Method Details
-
byteBody
Description copied from interface:ServerHttpRequest
Get the bytes of the body. The body is owned by the request, so the caller should generally not close it or do any primary operations. The body is usually consumed by the argument binder of the controller, e.g. if it has a@Body
argument. If you want to use the body,ByteBody.split(ByteBody.SplitBackpressureMode)
it first.- Specified by:
byteBody
in interfaceServerHttpRequest<T>
- Returns:
- The body bytes of this request
-
setLegacyBody
-
addRouteWaitsFor
-
getRouteWaitsFor
-
formRouteCompleter
-
hasFormRouteCompleter
public final boolean hasFormRouteCompleter() -
mutate
Description copied from interface:HttpRequest
Returns a new request object that allows mutation.- Specified by:
mutate
in interfaceHttpRequest<T>
- Returns:
- The mutable request
-
getAttribute
Description copied from interface:AttributeHolder
Obtain the value of an attribute on the HTTP method.- Specified by:
getAttribute
in interfaceAttributeHolder
- Parameters:
name
- The name of the attribute- Returns:
- An
Optional
value
-
getHttpVersion
- Specified by:
getHttpVersion
in interfaceHttpRequest<T>
- Returns:
- The http version of the request.
-
toString
-
getNativeRequest
public io.netty.handler.codec.http.HttpRequest getNativeRequest()- Returns:
- Obtain a reference to the native Netty HTTP request
-
getChannelHandlerContext
public io.netty.channel.ChannelHandlerContext getChannelHandlerContext()- Returns:
- The
ChannelHandlerContext
-
getCookies
- Specified by:
getCookies
in interfaceHttpRequest<T>
- Returns:
- The
Cookies
instance
-
getRemoteAddress
- Specified by:
getRemoteAddress
in interfaceHttpRequest<T>
- Returns:
- Obtain the remote address
-
getServerAddress
- Specified by:
getServerAddress
in interfaceHttpRequest<T>
- Returns:
- Obtain the server address
-
getServerName
- Specified by:
getServerName
in interfaceHttpRequest<T>
- Returns:
- The server host name
-
isSecure
public boolean isSecure()- Specified by:
isSecure
in interfaceHttpRequest<T>
- Returns:
- Is the request an HTTPS request
-
getOrigin
Description copied from interface:HttpRequest
Get the origin header.- Specified by:
getOrigin
in interfaceHttpRequest<T>
- Returns:
- The origin header
- See Also:
-
getHeaders
- Specified by:
getHeaders
in interfaceHttpMessage<T>
- Returns:
- The
HttpHeaders
object
-
getAttributes
Description copied from interface:HttpMessage
A
MutableConvertibleValues
of the attributes for this HTTP message.Attributes are designed for internal data sharing and hence are isolated from headers and parameters which are client supplied
- Specified by:
getAttributes
in interfaceAttributeHolder
- Specified by:
getAttributes
in interfaceHttpMessage<T>
- Specified by:
getAttributes
in interfaceMutableAttributeHolder
- Returns:
- The attributes of the message
-
setAttribute
Description copied from interface:MutableAttributeHolder
Sets an attribute on the message.- Specified by:
setAttribute
in interfaceHttpMessage<T>
- Specified by:
setAttribute
in interfaceHttpRequest<T>
- Specified by:
setAttribute
in interfaceMutableAttributeHolder
- Parameters:
name
- The name of the attributevalue
- The value of the attribute- Returns:
- This message
-
getSslSession
Description copied from interface:HttpRequest
Get the SSL session used for the connection to the client, if available.- Specified by:
getSslSession
in interfaceHttpRequest<T>
- Returns:
- The session
-
getBody
- Specified by:
getBody
in interfaceHttpMessage<T>
- Returns:
- The request body
-
getBody
Description copied from interface:HttpMessage
Return the body as the given type.- Specified by:
getBody
in interfaceHttpMessage<T>
- Type Parameters:
T1
- The generic type- Parameters:
type
- The type of the body- Returns:
- An
Optional
of the type orOptional.empty()
if the body cannot be returned as the given type
-
getBody
Description copied from interface:HttpMessage
Return the body, will use the provided conversion context if needed.- Specified by:
getBody
in interfaceHttpMessage<T>
- Type Parameters:
T1
- The generic type- Parameters:
conversionContext
- The body conversion context- Returns:
- An
Optional
of the type orOptional.empty()
if the body cannot be returned as the given type
-
release
Release and cleanup resources. -
releaseIfNecessary
- Parameters:
value
- An object with a value
-
isServerPushSupported
public boolean isServerPushSupported()Description copied from interface:PushCapableHttpRequest
Check whether HTTP2 server push is supported by the remote client. Only HTTP2 clients that indicate support through HTTP2 settings have this method returntrue
.- Specified by:
isServerPushSupported
in interfacePushCapableHttpRequest<T>
- Returns:
true
iff server push is supported.
-
serverPush
Description copied from interface:PushCapableHttpRequest
Initiate a HTTP2 server push for the given request. The information from the given request (i.e. path, headers) will be passed on to the client immediately so that it does not send the request itself. Then, the given request will be handled as if it was initiated by the client, and the response will be passed back to the client.
This method mostly follows the semantics of JavaEE
javax.servlet.http.PushBuilder
. This means most of the headers of this request are copied into the push request, and the referer is set. To override this behavior, add a corresponding header to therequest
passed as the parameter of this method: those headers take precedence.Security note: The
Authorization
header and other headers not excluded by the above paragraph will be copied and sent to the client as part of a HTTP2PUSH_PROMISE
. Normally, this is fine, because the client sent those headers in the first place. But if there is an intermediate proxy that added a header, this header may then leak to the client.- Specified by:
serverPush
in interfacePushCapableHttpRequest<T>
- Parameters:
request
- The request to respond to using a server push.- Returns:
- This request.
-
initCharset
- Specified by:
initCharset
in classAbstractNettyHttpRequest<T>
- Parameters:
characterEncoding
- The character encoding- Returns:
- The Charset
-
isFormOrMultipartData
- Returns:
- Return true if the request is form data.
-
toHttpRequest
Deprecated.Description copied from interface:NettyHttpRequestBuilder
Converts this object to the most appropriate http request type.- Specified by:
toHttpRequest
in interfaceNettyHttpRequestBuilder
- Overrides:
toHttpRequest
in classAbstractNettyHttpRequest<T>
- Returns:
- The http request
-
toHttpRequestDirect
Description copied from interface:NettyHttpRequestBuilder
Directly convert this request to netty, including the body, if possible. If the body of this request has been changed, this will return an empty value.- Specified by:
toHttpRequestDirect
in interfaceNettyHttpRequestBuilder
- Returns:
- The request including the body
-
byteBodyDirect
Description copied from interface:NettyHttpRequestBuilder
Directly convert this request body to aByteBody
, if possible. If the body of this request has been changed, this will return an empty value.- Specified by:
byteBodyDirect
in interfaceNettyHttpRequestBuilder
- Returns:
- The body
-
toHttpRequestWithoutBody
public io.netty.handler.codec.http.HttpRequest toHttpRequestWithoutBody()Description copied from interface:NettyHttpRequestBuilder
Convert this request to a netty request without the body. The caller will handle adding the body.- Specified by:
toHttpRequestWithoutBody
in interfaceNettyHttpRequestBuilder
- Returns:
- The request excluding the body
-
getContentType
Description copied from interface:HttpMessage
The request or response content type.- Specified by:
getContentType
in interfaceHttpMessage<T>
- Returns:
- The content type
-
getContentLength
public long getContentLength()- Specified by:
getContentLength
in interfaceHttpMessage<T>
- Returns:
- The value of the Content-Length header or -1L if none specified
-
isFull
public boolean isFull()Description copied from interface:FullHttpRequest
Shortcut forcontents() != null
.- Specified by:
isFull
in interfaceFullHttpRequest<T>
- Returns:
- Is the request full.
-
contents
Description copied from interface:FullHttpRequest
Get the raw body of this request. May be called multiple times. Buffer ownership is not transferred to the caller.- Specified by:
contents
in interfaceFullHttpRequest<T>
- Returns:
- The body contents or null if there are none, or they are not obtainable.
-
bufferContents
Description copied from interface:FullHttpRequest
Get the contents of this request as a buffer. If this is a streaming request, the returned flow may be delayed. If buffering is not supported for this request, this may returnnull
. Once the returned flow completes,FullHttpRequest.contents()
must return the same value.- Specified by:
bufferContents
in interfaceFullHttpRequest<T>
- Returns:
- The request content, or
null
if buffering is not supported
-