Example usage for io.netty.handler.codec.http HttpUtil getMimeType

List of usage examples for io.netty.handler.codec.http HttpUtil getMimeType

Introduction

In this page you can find the example usage for io.netty.handler.codec.http HttpUtil getMimeType.

Prototype

public static CharSequence getMimeType(CharSequence contentTypeValue) 

Source Link

Document

Fetch MIME type part from Content-Type header value as a char sequence.

Usage

From source file:org.restnext.core.http.RequestImpl.java

License:Apache License

/**
 * Create a new instance.//from   w  ww .j  a va  2s  .  com
 *
 * @param context netty channel handler context
 * @param request netty full http request
 */
public RequestImpl(final ChannelHandlerContext context, final FullHttpRequest request) {
    Objects.requireNonNull(request, "request");
    Objects.requireNonNull(context, "context");

    this.charset = HttpUtil.getCharset(request, StandardCharsets.UTF_8);
    this.version = HttpVersion.HTTP_1_0.equals(request.protocolVersion()) ? Version.HTTP_1_0 : Version.HTTP_1_1;
    this.method = Method.valueOf(request.method().name());
    this.uri = URI.create(normalize(request.uri()));
    this.baseUri = createBaseUri(context, request);
    this.keepAlive = HttpUtil.isKeepAlive(request);

    // copy the inbound netty request headers.
    this.headers = new MultivaluedHashMap<>();
    for (Map.Entry<String, String> entry : request.headers()) {
        this.headers.add(entry.getKey().toLowerCase(), entry.getValue());
    }

    this.parameters = new MultivaluedHashMap<>();
    // decode the inbound netty request uri parameters.
    QueryStringDecoder queryDecoder = new QueryStringDecoder(request.uri(), charset);
    for (Map.Entry<String, List<String>> entry : queryDecoder.parameters().entrySet()) {
        this.parameters.addAll(entry.getKey(), entry.getValue());
    }

    // decode the inbound netty request body parameters.
    if (Method.POST.equals(method)) {
        CharSequence charSequence = HttpUtil.getMimeType(request);
        AsciiString mimeType = charSequence != null ? AsciiString.of(charSequence) : AsciiString.EMPTY_STRING;
        boolean isFormData = mimeType.contains(HttpHeaderValues.FORM_DATA);

        if (isFormData) {
            // decode the inbound netty request body multipart/form-data parameters.
            HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(), request,
                    charset);
            try {
                for (InterfaceHttpData data : decoder.getBodyHttpDatas()) {
                    InterfaceHttpData.HttpDataType type = data.getHttpDataType();
                    switch (type) {
                    case Attribute: {
                        try {
                            Attribute attribute = (Attribute) data;
                            this.parameters.add(attribute.getName(), attribute.getValue());
                        } catch (IOException ignore) {
                            LOGGER.warn("Could not get attribute value");
                        }
                        break;
                    }
                    case FileUpload:
                        break;
                    case InternalAttribute:
                        break;
                    default: //nop
                    }
                }
            } finally {
                decoder.destroy();
            }
        } else {
            // decode the inbound netty request body raw | form-url-encoded | octet-stream parameters.
            this.content = request.content().hasArray() ? request.content().array()
                    : request.content().toString(charset).getBytes();
        }
    }
}

From source file:org.restnext.server.CustomHttpContentCompressor.java

License:Apache License

@Override
protected void encode(ChannelHandlerContext ctx, HttpObject msg, List<Object> out) throws Exception {
    if (msg instanceof HttpResponse) {
        HttpResponse res = (HttpResponse) msg;

        skipCompression = false;//from   ww  w  .j a  va2s .  c o m

        // if an "content-encoding: identity" header was set, we do not compress
        if (skipCompression = res.headers().containsValue(HttpHeaderNames.CONTENT_ENCODING,
                HttpHeaderValues.IDENTITY, true)) {
            // remove header as one should not send Identity as content encoding
            res.headers().remove(HttpHeaderNames.CONTENT_ENCODING);
        } else {
            CharSequence mimeType = HttpUtil.getMimeType(res);
            // skip compression if the media type is not compressible by the server
            skipCompression = mimeType != null && !isCompressable(MediaType.parse(mimeType.toString()));

            // skip compression if the content length is less than expected by the server
            int contentLength = res.headers().getInt(HttpHeaderNames.CONTENT_LENGTH, 0);
            skipCompression = contentLength > 0 && contentLength < compressionContentLength;
        }
    }

    super.encode(ctx, msg, out);
}