从HttpServletRequest读取二进制数据

时间:2016-06-08 22:01:19

标签: java jetty

使用Jetty,我将字节发送到网址http://localhost:8080/input/,就像这样 -

public static void sampleBytesRequest (String url)
{
    try
    {
        HttpClient client = new HttpClient();
        client.start();

        client.newRequest(url)
              .content(new InputStreamContentProvider(new ByteArrayInputStream("batman".getBytes())))
              .send();
    }
    catch (Exception e) { e.printStackTrace(); }
}

我的服务器(也是Jetty)有一个像这样的处理程序 -

public final class JettyHandler extends AbstractHandler implements JettyConstants, LqsConstants
{
@Override
public void handle (String target,
                    Request baseRequest,
                    HttpServletRequest request,
                    HttpServletResponse response)
             throws IOException, ServletException
{
    response.setContentType(UTF_ENCODING);

    String requestBody = null;
    try { requestBody = baseRequest.getReader().readLine(); }
    catch (IOException e) { e.printStackTrace(); }

     System.out.println(new String(IOUtils.toByteArray(request.getInputStream())));
}
}

如您所见,我尝试从二进制数据中重新创建原始字符串并将其打印到stdout。

但是,如果我在处理程序的print语句中设置了一个断点,当请求到达该行时,服务器突然似乎跳过它。

我做错了什么?如何获取我发送的二进制数据并重新创建字符串?

谢谢!

1 个答案:

答案 0 :(得分:0)

原来问题出在我的客户身上。

而不是

client.newRequest(url)
          .content(new InputStreamContentProvider(new ByteArrayInputStream("batman".getBytes())))
          .send();

正确的方法是 -

client.newRequest(url)
      .content(new BytesContentProvider("batman".getBytes()), "text/plain")
      .send();