2015-04-27 13 views
0

我正在開發一個客戶端/服務器應用程序。 服務器端我使用Java EE和Resteasy作爲庫來開發REST Web服務。客戶端我寫了一個簡單的HTML頁面來查詢這些後端服務。 我所做的所有服務都正常工作,除了一個@POST服務。@用Resteasy開發的REST服務的POST方法

它的代碼是:

@OPTIONS 
@Override 
@POST 
@Path("/{id}/jobs") 
public void print(@PathParam("id") String deviceId, 
    @FormParam("doc") byte[] doc, 
    @FormParam("copies") int copies) 
{ 
    ... 
} 

的問題是字節的,我從前端到後端發送陣列到達,但到達時,它是空的。其他輸入參數正確地到達後端。

我認爲這個問題可以通過在方法上定義@Consumes來解決,但我不知道應該使用哪個「應用程序」類型。有人可以幫助我嗎?

回答

1

@FormParam文檔:

註釋參數的類型T必須要麼:

  1. 一個原始類型
  2. 有無接受單個字符串參數的構造
  3. 有一個名爲valueOf或fromString的靜態方法,它接受單個> String參數(例如,請參閱Integer.valueOf(String))
  4. 是List,Set或SortedSet,其中T滿足上面的2或3。結果集合是隻讀的。
0

你想上傳文件嗎?這就是爲什麼你使用doc byte []參數,對吧?在這種情況下,你是對的,你需要使用@Consumes註釋是這樣的:

@OPTIONS 
@Override 
@POST 
@Path("/{id}/jobs") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public void print(@FormDataParam("doc") InputStream is, 
    @FormDataParam("doc") FormDataContentDisposition formData, 
    @PathParam("id") String deviceId, 
    @FormParam("copies") int copies) 
{ 
    //code to process your InputStream to get your byte[] 
    ... 
} 

,這將是你的HTML:

<form action="yourPath/yourId/jobs" method="post" enctype="multipart/form-data"> 
    File : <input type="file" name="doc" /> 
    <br/> 
    <input type="submit" value="Submit" /> 
</form> 

的importan代碼是「encytype」屬性在您的表單中,@Consumes註釋和@FormDataParam來接收您上傳的文件數據。您可以看到一個完整的示例here