2013-02-22 34 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