2013-02-22 59 views
1
@POST 
@Path("/getphotos") 
@Produces(MediaType.TEXT_HTML) 
public String getPhotos() throws IOException{ 
    BufferedReader rd = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8")); 
    String line; 
    while ((line = rd.readLine()) != null) { 
     System.out.println(line); 
    } 
    return "ok";   
} 

上面的代码用于我的服务器。 但是在这段代码中,字符串“line”没有任何值(总是) 代码有问题吗?Jersey request.getInputStream()


客户端代码

String message = "message"; 
    URL url = new URL(targetURL); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

    urlConnection.setDoInput(true); 
    urlConnection.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream()); 
    wr.write(message); 
+0

提供强大的功能以下链接将帮助您阅读请求中的行。 [链接阅读线] [1] [1]:http://stackoverflow.com/questions/5175203/httpservlet-request-getinputstream-always-receiving-blank-line – 2013-02-22 16:19:07

+0

它是一个坏主意,使用缓冲读者可以阅读(推测)非文字信息。什么是传入的内容类型,您是否将它作为多部分数据发送? – Perception 2013-02-22 16:25:30

+0

传入的数据是现在的字符串,但后来它将被更改为Json也发送类型将Json – 2013-02-22 16:34:05

回答

2

可以手动泽西消耗的请求的数据,只要你有一个有效的句柄实际HttpServletRequest。在轻微侧面说明,请记住,你只能消耗请求主体一次

@Context 
private HttpServletRequest request; 

@POST 
@Path("/") 
public Response consumeRequest() { 
    try { 
     final BufferedReader rd = new BufferedReader(new InputStreamReader(
       request.getInputStream(), "UTF-8")); 

     String line = null; 
     final StringBuffer buffer = new StringBuffer(2048); 

     while ((line = rd.readLine()) != null) { 
      buffer.append(line); 
     } 
     final String data = buffer.toString(); 
     return Response.ok().entity(data).build(); 
    } catch (final Exception e) { 
     return Response.status(Status.BAD_REQUEST) 
       .entity("No data supplied").build(); 
    } 
} 

边注:如Apache下议院IO库读取IO数据

+0

谢谢你的回答。在上面的代码中,StringBuffer“buffer”将被分配来自客户端的数据。对? – 2013-02-22 17:20:01

+0

@JuengwooYu - 是的,输入流数据逐行累积到缓冲区。最后,整个事情被翻转成一个字符串。 – Perception 2013-02-22 17:22:52

+0

但缓冲区也是空的。然后发送程序可能是错误的。 – 2013-02-22 17:35:19