Class NettyHttpRequest<T>
- Type Parameters:
T- The type
- All Implemented Interfaces:
AttributeHolder,MutableAttributeHolder,FullHttpRequest<T>,HttpMessage<T>,HttpRequest<T>,NettyHttpRequestBuilder,PushCapableHttpRequest<T>,io.netty.util.AttributeMap
HttpRequest instance.- Since:
- 1.0
- Author:
- Graeme Rocher
-
Field Summary
Fields inherited from class io.micronaut.http.netty.AbstractNettyHttpRequest
conversionService, httpMethod, httpMethodName, nettyRequest, unvalidatedUrlFields inherited from interface io.micronaut.http.HttpRequest
SCHEME_HTTP, SCHEME_HTTPS -
Constructor Summary
ConstructorsConstructorDescriptionNettyHttpRequest(io.netty.handler.codec.http.HttpRequest nettyRequest, ByteBody body, io.netty.channel.ChannelHandlerContext ctx, ConversionService environment, HttpServerConfiguration serverConfiguration) -
Method Summary
Modifier and TypeMethodDescriptionfinal voidaddRouteWaitsFor(ExecutionFlow<?> executionFlow) Get the contents of this request as a buffer.final ByteBodybyteBody()Get the last byte body of this request, be it claimed or unclaimed.ByteBuffer<?>contents()Get the raw body of this request.final FormRouteCompletergetAttribute(CharSequence name) Obtain the value of an attribute on the HTTP method.AMutableConvertibleValuesof 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.Retrieves the Certificate used for mutual authentication.io.netty.channel.ChannelHandlerContextlongThe request or response content type.io.netty.handler.codec.http.HttpRequestGet the origin header.final ExecutionFlow<?>final booleanprotected CharsetinitCharset(Charset characterEncoding) final booleanbooleanisFull()Shortcut forcontents() != null.booleanisSecure()booleanCheck whether HTTP2 server push is supported by the remote client.final HttpBodylastBody()Get the last body of this request, of any type.mutate()Returns a new request object that allows mutation.voidrelease()Release and cleanup resources.protected voidreleaseIfNecessary(Object value) final ByteBodyrootBody()Get the initial body of this request.serverPush(@NonNull HttpRequest<?> request) Initiate a HTTP2 server push for the given request.setAttribute(CharSequence name, Object value) Sets an attribute on the message.io.netty.handler.codec.http.HttpRequestDeprecated.Optional<io.netty.handler.codec.http.HttpRequest>Directly convert this request to netty, including the body, if possible.io.netty.handler.codec.http.HttpRequestConvert 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, toStreamHttpRequestMethods inherited from class io.netty.util.DefaultAttributeMap
attr, hasAttrMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface io.micronaut.core.attr.AttributeHolder
getAttributeMethods inherited from interface io.micronaut.http.HttpMessage
getBody, getBodyWriter, getCharacterEncodingMethods inherited from interface io.micronaut.http.HttpRequest
accept, getLocale, getMethod, getMethodName, getParameters, getPath, getUri, getUserPrincipal, getUserPrincipalMethods inherited from interface io.micronaut.core.attr.MutableAttributeHolder
removeAttribute
-
Constructor Details
-
NettyHttpRequest
public NettyHttpRequest(io.netty.handler.codec.http.HttpRequest nettyRequest, ByteBody body, io.netty.channel.ChannelHandlerContext ctx, ConversionService environment, HttpServerConfiguration serverConfiguration) throws IllegalArgumentException - Parameters:
nettyRequest- TheHttpRequestbody- The request bodyctx- TheChannelHandlerContextenvironment- The EnvironmentserverConfiguration- TheHttpServerConfiguration- Throws:
IllegalArgumentException- When the request URI is invalid
-
-
Method Details
-
rootBody
Get the initial body of this request. This is always aByteBody. In most cases you should usebyteBody()instead.- Returns:
- The root body
-
byteBody
Get the last byte body of this request, be it claimed or unclaimed. Basically, there are two options: For buffered requests (rootBody is immediate), this is just the root body. For streaming requests (rootBody is streaming), this can be that root body, or if someone calledByteBody.buffer(io.netty.buffer.ByteBufAllocator)(and the buffering has completed), it can be the buffered immediate body.
The returned byte body may have been claimed already.- Returns:
- The byte body of this request
-
lastBody
Get the last body of this request, of any type. This is a weird method to use, avoid it. It's sometimes necessary to "piggyback" off other code that parses the body. For example ingetBody(), we want to return whatever we can, even if the body has already been claimed for a@Bodyparameter or form parsing or something. So we take the last step in the parse chain and do our best with it.- Returns:
- The last body of this request
-
addRouteWaitsFor
-
getRouteWaitsFor
-
formRouteCompleter
-
hasFormRouteCompleter
public final boolean hasFormRouteCompleter() -
mutate
Description copied from interface:HttpRequestReturns a new request object that allows mutation.- Specified by:
mutatein interfaceHttpRequest<T>- Returns:
- The mutable request
-
getAttribute
Description copied from interface:AttributeHolderObtain the value of an attribute on the HTTP method.- Specified by:
getAttributein interfaceAttributeHolder- Parameters:
name- The name of the attribute- Returns:
- An
Optionalvalue
-
getHttpVersion
- Specified by:
getHttpVersionin 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:
getCookiesin interfaceHttpRequest<T>- Returns:
- The
Cookiesinstance
-
getRemoteAddress
- Specified by:
getRemoteAddressin interfaceHttpRequest<T>- Returns:
- Obtain the remote address
-
getServerAddress
- Specified by:
getServerAddressin interfaceHttpRequest<T>- Returns:
- Obtain the server address
-
getServerName
- Specified by:
getServerNamein interfaceHttpRequest<T>- Returns:
- The server host name
-
isSecure
public boolean isSecure()- Specified by:
isSecurein interfaceHttpRequest<T>- Returns:
- Is the request an HTTPS request
-
getOrigin
Description copied from interface:HttpRequestGet the origin header.- Specified by:
getOriginin interfaceHttpRequest<T>- Returns:
- The origin header
- See Also:
-
getHeaders
- Specified by:
getHeadersin interfaceHttpMessage<T>- Returns:
- The
HttpHeadersobject
-
getAttributes
Description copied from interface:HttpMessageA
MutableConvertibleValuesof 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:
getAttributesin interfaceAttributeHolder- Specified by:
getAttributesin interfaceHttpMessage<T>- Specified by:
getAttributesin interfaceMutableAttributeHolder- Returns:
- The attributes of the message
-
setAttribute
Description copied from interface:MutableAttributeHolderSets an attribute on the message.- Specified by:
setAttributein interfaceHttpMessage<T>- Specified by:
setAttributein interfaceHttpRequest<T>- Specified by:
setAttributein interfaceMutableAttributeHolder- Parameters:
name- The name of the attributevalue- The value of the attribute- Returns:
- This message
-
getCertificate
Description copied from interface:HttpRequestRetrieves the Certificate used for mutual authentication.- Specified by:
getCertificatein interfaceHttpRequest<T>- Returns:
- A certificate used for authentication, if applicable.
-
getBody
- Specified by:
getBodyin interfaceHttpMessage<T>- Returns:
- The request body
-
getBody
Description copied from interface:HttpMessageReturn the body as the given type.- Specified by:
getBodyin interfaceHttpMessage<T>- Type Parameters:
T1- The generic type- Parameters:
type- The type of the body- Returns:
- An
Optionalof the type orOptional.empty()if the body cannot be returned as the given type
-
getBody
Description copied from interface:HttpMessageReturn the body, will use the provided conversion context if needed.- Specified by:
getBodyin interfaceHttpMessage<T>- Type Parameters:
T1- The generic type- Parameters:
conversionContext- The body conversion context- Returns:
- An
Optionalof 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:PushCapableHttpRequestCheck 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:
isServerPushSupportedin interfacePushCapableHttpRequest<T>- Returns:
trueiff server push is supported.
-
serverPush
Description copied from interface:PushCapableHttpRequestInitiate 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 therequestpassed as the parameter of this method: those headers take precedence.Security note: The
Authorizationheader 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:
serverPushin interfacePushCapableHttpRequest<T>- Parameters:
request- The request to respond to using a server push.- Returns:
- This request.
-
initCharset
- Specified by:
initCharsetin 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:NettyHttpRequestBuilderConverts this object to the most appropriate http request type.- Specified by:
toHttpRequestin interfaceNettyHttpRequestBuilder- Overrides:
toHttpRequestin classAbstractNettyHttpRequest<T>- Returns:
- The http request
-
toHttpRequestDirect
Description copied from interface:NettyHttpRequestBuilderDirectly 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:
toHttpRequestDirectin interfaceNettyHttpRequestBuilder- Returns:
- The request including the body
-
toHttpRequestWithoutBody
public io.netty.handler.codec.http.HttpRequest toHttpRequestWithoutBody()Description copied from interface:NettyHttpRequestBuilderConvert this request to a netty request without the body. The caller will handle adding the body.- Specified by:
toHttpRequestWithoutBodyin interfaceNettyHttpRequestBuilder- Returns:
- The request excluding the body
-
getContentType
Description copied from interface:HttpMessageThe request or response content type.- Specified by:
getContentTypein interfaceHttpMessage<T>- Returns:
- The content type
-
getContentLength
public long getContentLength()- Specified by:
getContentLengthin interfaceHttpMessage<T>- Returns:
- The value of the Content-Length header or -1L if none specified
-
isFull
public boolean isFull()Description copied from interface:FullHttpRequestShortcut forcontents() != null.- Specified by:
isFullin interfaceFullHttpRequest<T>- Returns:
- Is the request full.
-
contents
Description copied from interface:FullHttpRequestGet the raw body of this request. May be called multiple times. Buffer ownership is not transferred to the caller.- Specified by:
contentsin interfaceFullHttpRequest<T>- Returns:
- The body contents or null if there are none, or they are not obtainable.
-
bufferContents
Description copied from interface:FullHttpRequestGet 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:
bufferContentsin interfaceFullHttpRequest<T>- Returns:
- The request content, or
nullif buffering is not supported
-