@Override public void write(HttpRequest<?> request, MutableHttpResponse<?> response, ChannelHandlerContext context) { if (response instanceof NettyMutableHttpResponse) { FullHttpResponse nettyResponse = ((NettyMutableHttpResponse) response).getNativeResponse(); // Write the request data context.write(new DefaultHttpResponse(nettyResponse.protocolVersion(), nettyResponse.status(), nettyResponse.headers()), context.voidPromise()); context.writeAndFlush(new HttpChunkedInput(new ChunkedStream(getInputStream()))); } else { throw new IllegalArgumentException("Unsupported response type. Not a Netty response: " + response); } } }
context.write(new DefaultHttpResponse(nettyResponse.protocolVersion(), nettyResponse.status(), headers), context.voidPromise());
private void writeFinalNettyResponse(MutableHttpResponse<?> message, AtomicReference<HttpRequest<?>> requestReference, ChannelHandlerContext context) { NettyMutableHttpResponse nettyHttpResponse = (NettyMutableHttpResponse) message; FullHttpResponse nettyResponse = nettyHttpResponse.getNativeResponse(); HttpRequest<?> httpRequest = requestReference.get(); io.netty.handler.codec.http.HttpHeaders nettyHeaders = nettyResponse.headers(); // default Connection header if not set explicitly if (!nettyHeaders.contains(HttpHeaderNames.CONNECTION)) { boolean expectKeepAlive = nettyResponse.protocolVersion().isKeepAliveDefault() || httpRequest.getHeaders().isKeepAlive(); HttpStatus status = nettyHttpResponse.status(); if (!expectKeepAlive || status.getCode() > 299) { nettyHeaders.add(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); } else { nettyHeaders.add(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); } } // default to Transfer-Encoding: chunked if Content-Length not set or not already set if (!nettyHeaders.contains(HttpHeaderNames.CONTENT_LENGTH) && !nettyHeaders.contains(HttpHeaderNames.TRANSFER_ENCODING)) { nettyHeaders.add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); } final Object body = message.body(); if (body instanceof NettyCustomizableResponseTypeHandlerInvoker) { NettyCustomizableResponseTypeHandlerInvoker handler = (NettyCustomizableResponseTypeHandlerInvoker) body; handler.invoke(httpRequest, nettyHttpResponse, context); } else { // close handled by HttpServerKeepAliveHandler context.writeAndFlush(nettyResponse); context.read(); } }
public static HttpResponse newResponse(final FullHttpResponse response) { return builder() .withVersion(toHttpProtocolVersion(response.protocolVersion())) .withStatus(response.status().code()) .withHeaders(toHeaders(response)) .withContent(content() .withContent(new ByteBufInputStream(response.content())) .build()) .build(); }
public String version() { return delegate.protocolVersion().text(); }
@Override protected void encode(ChannelHandlerContext ctx, HttpJsonResponse msg, List<Object> out) throws Exception { // 编码 ByteBuf body = jsonEncode(ctx,msg.getResult()); FullHttpResponse response = msg.getHttpResponse(); if (response == null){ response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,body); } else { response = new DefaultFullHttpResponse(msg.getHttpResponse().protocolVersion(),msg.getHttpResponse().status(),body); } response.headers().set(HttpHeaderNames.CONTENT_TYPE,"text/json"); HttpUtil.setContentLength(response,body.readableBytes()); out.add(response); } }
public void setHttpResponse(FullHttpResponse httpResponse) { setProtocolVersion(httpResponse.protocolVersion()); setStatus(httpResponse.status()); content().writeBytes(httpResponse.content()); headers().add(httpResponse.headers()); trailingHeaders().add(httpResponse.trailingHeaders()); setDecoderResult(httpResponse.decoderResult()); }
/** * http response引用计数交给rpc response管理。 * @param httpResponse http response */ public RpcResponse(FullHttpResponse httpResponse) { super(httpResponse.protocolVersion(), httpResponse.status(), httpResponse.content(), httpResponse.headers().copy(), httpResponse.trailingHeaders().copy()); this.setDecoderResult(httpResponse.decoderResult()); }
public void setHttpResponse(FullHttpResponse httpResponse) { setProtocolVersion(httpResponse.protocolVersion()); setStatus(httpResponse.status()); content().writeBytes(httpResponse.content()); headers().add(httpResponse.headers()); trailingHeaders().add(httpResponse.trailingHeaders()); setDecoderResult(httpResponse.decoderResult()); }
/** * http response引用计数交给rpc response管理。 * @param httpResponse http response */ public RpcResponse(FullHttpResponse httpResponse) { super(httpResponse.protocolVersion(), httpResponse.status(), httpResponse.content(), httpResponse.headers().copy(), httpResponse.trailingHeaders().copy()); this.setDecoderResult(httpResponse.decoderResult()); }