Json netty 响应和 java
Json response in netty and java
我想使用 netty http 服务器发送 json 响应。我使用 Gson 创建 json。我的代码看起来像那样
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.OK);
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, 0);
response.headers().set(HttpHeaders.Names.CONTENT_TYPE, "application/json");
JsonObject jsonResponseMessage = new JsonObject();
jsonResponseMessage.addProperty("result", success);
ctx.write(jsonResponseMessage);
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, jsonResponseMessage.toString().length());
ctx.write(response);
在 channelRead0 方法中,
ctx.flush()
在 channelReadComplete 方法中。问题是我从来没有得到回应,回来,似乎请求被卡住了,从来没有 return 回应。我相信这与内容长度有关。我需要做更多的事情吗?
您需要构造一个 FullHttpResponse 或通过编写一个 LastHttpContent 来结束 HttpReponse。
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(here_your_data_as_byte_array));
response .headers().set(CONTENT_TYPE, "application/json");
response .headers().set(CONTENT_LENGTH, response .content().readableBytes());
ctx.write(response );
ctx.flush();
我想使用 netty http 服务器发送 json 响应。我使用 Gson 创建 json。我的代码看起来像那样
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.OK);
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, 0);
response.headers().set(HttpHeaders.Names.CONTENT_TYPE, "application/json");
JsonObject jsonResponseMessage = new JsonObject();
jsonResponseMessage.addProperty("result", success);
ctx.write(jsonResponseMessage);
response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, jsonResponseMessage.toString().length());
ctx.write(response);
在 channelRead0 方法中,
ctx.flush()
在 channelReadComplete 方法中。问题是我从来没有得到回应,回来,似乎请求被卡住了,从来没有 return 回应。我相信这与内容长度有关。我需要做更多的事情吗?
您需要构造一个 FullHttpResponse 或通过编写一个 LastHttpContent 来结束 HttpReponse。
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(here_your_data_as_byte_array));
response .headers().set(CONTENT_TYPE, "application/json");
response .headers().set(CONTENT_LENGTH, response .content().readableBytes());
ctx.write(response );
ctx.flush();