List of usage examples for io.netty.handler.codec.http HttpUtil getMimeType
public static CharSequence getMimeType(CharSequence contentTypeValue)
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); }