Class NettyHttpRequest<T>

java.lang.Object
io.netty.util.DefaultAttributeMap
io.micronaut.http.netty.AbstractNettyHttpRequest<T>
io.micronaut.http.server.netty.NettyHttpRequest<T>
Type Parameters:
T - The type
All Implemented Interfaces:
AttributeHolder, MutableAttributeHolder, HttpMessage<T>, HttpRequest<T>, NettyHttpRequestBuilder, PushCapableHttpRequest<T>, io.netty.util.AttributeMap

@Internal public class NettyHttpRequest<T> extends AbstractNettyHttpRequest<T> implements HttpRequest<T>, PushCapableHttpRequest<T>
Delegates to the Netty HttpRequest instance.
Since:
1.0
Author:
Graeme Rocher
  • Constructor Details

    • NettyHttpRequest

      public NettyHttpRequest(io.netty.handler.codec.http.HttpRequest nettyRequest, io.netty.channel.ChannelHandlerContext ctx, ConversionService environment, HttpServerConfiguration serverConfiguration)
      Parameters:
      nettyRequest - The HttpRequest
      ctx - The ChannelHandlerContext
      environment - The Environment
      serverConfiguration - The HttpServerConfiguration
  • Method Details

    • mutate

      public MutableHttpRequest<T> mutate()
      Description copied from interface: HttpRequest
      Returns a new request object that allows mutation.
      Specified by:
      mutate in interface HttpRequest<T>
      Returns:
      The mutable request
    • getAttribute

      @NonNull public Optional<Object> getAttribute(CharSequence name)
      Description copied from interface: AttributeHolder
      Obtain the value of an attribute on the HTTP method.
      Specified by:
      getAttribute in interface AttributeHolder
      Parameters:
      name - The name of the attribute
      Returns:
      An Optional value
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • 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

      public Cookies getCookies()
      Specified by:
      getCookies in interface HttpRequest<T>
      Returns:
      The Cookies instance
    • getRemoteAddress

      public InetSocketAddress getRemoteAddress()
      Specified by:
      getRemoteAddress in interface HttpRequest<T>
      Returns:
      Obtain the remote address
    • getServerAddress

      public InetSocketAddress getServerAddress()
      Specified by:
      getServerAddress in interface HttpRequest<T>
      Returns:
      Obtain the server address
    • getServerName

      public String getServerName()
      Specified by:
      getServerName in interface HttpRequest<T>
      Returns:
      The server host name
    • isSecure

      public boolean isSecure()
      Specified by:
      isSecure in interface HttpRequest<T>
      Returns:
      Is the request an HTTPS request
    • getHeaders

      public HttpHeaders getHeaders()
      Specified by:
      getHeaders in interface HttpMessage<T>
      Returns:
      The HttpHeaders object
    • getAttributes

      public MutableConvertibleValues<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 interface AttributeHolder
      Specified by:
      getAttributes in interface HttpMessage<T>
      Specified by:
      getAttributes in interface MutableAttributeHolder
      Returns:
      The attributes of the message
    • getBody

      public Optional<T> getBody()
      Specified by:
      getBody in interface HttpMessage<T>
      Returns:
      The request body
    • buildBody

      protected Object buildBody()
      Returns:
      A CompositeByteBuf
    • getBody

      public <T1> Optional<T1> getBody(Class<T1> type)
      Description copied from interface: HttpMessage
      Return the body as the given type.
      Specified by:
      getBody in interface HttpMessage<T>
      Type Parameters:
      T1 - The generic type
      Parameters:
      type - The type of the body
      Returns:
      An Optional of the type or Optional.empty() if the body cannot be returned as the given type
    • getBody

      public <T1> Optional<T1> getBody(ArgumentConversionContext<T1> conversionContext)
      Description copied from interface: HttpMessage
      Return the body, will use the provided conversion context if needed.
      Specified by:
      getBody in interface HttpMessage<T>
      Type Parameters:
      T1 - The generic type
      Parameters:
      conversionContext - The body conversion context
      Returns:
      An Optional of the type or Optional.empty() if the body cannot be returned as the given type
    • release

      @Internal public void release()
      Release and cleanup resources.
    • releaseIfNecessary

      protected void releaseIfNecessary(Object value)
      Parameters:
      value - An object with a value
    • setBody

      @Internal public void setBody(T body)
      Sets the body.
      Parameters:
      body - The body to set
    • getMatchedRoute

      @Internal public RouteMatch<?> getMatchedRoute()
      Returns:
      Obtains the matched route
    • addContent

      @Internal public void addContent(io.netty.buffer.ByteBufHolder httpContent)
      Parameters:
      httpContent - The HttpContent as ByteBufHolder
    • 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 return true.
      Specified by:
      isServerPushSupported in interface PushCapableHttpRequest<T>
      Returns:
      true iff server push is supported.
    • serverPush

      public PushCapableHttpRequest<T> serverPush(@NonNull HttpRequest<?> request)
      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 the request 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 HTTP2 PUSH_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 interface PushCapableHttpRequest<T>
      Parameters:
      request - The request to respond to using a server push.
      Returns:
      This request.
    • initCharset

      protected Charset initCharset(Charset characterEncoding)
      Specified by:
      initCharset in class AbstractNettyHttpRequest<T>
      Parameters:
      characterEncoding - The charactger encoding
      Returns:
      The Charset