2013-11-25 203 views
1

我有HTML表單數據並傳遞給RESTful POST方法。我注意到,如果@FormParam被聲明爲RESTful @FormParam 400錯誤請求

@POST 
public void commitProjects(
@FormParam("projectId") 
     int projectId) 

,如果當從瀏覽器中執行POST方法專案編號爲空或空的話,我得到 400 Bad Request錯誤。

這可能是什麼原因,以及克服這種情況的最佳方法是什麼?

編輯1

從瀏覽器

projectDesc=test&projectId= 

和方法是從Jquery的稱爲

method: 'POST', 
//dataType: "json", 
contentType : "application/x-www-form-urlencoded", 
url: '/rest/projects', 

HTTP頭

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8;q=0.6 
Cache-Control:max-age=0 
Connection:keep-alive 
Content-Length:625 
Content-Type:application/x-www-form-urlencoded 
Cookie:JSESSIONID=0a0a0a0a231b787e42dd10d840d3b035d5998c574416 
Host:xxxxxx:8987 
Origin:http://xxxxx:8987 
Referer:http://xxxxx:8987/project/test.jsp 
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 

表單數據

projectDesc=test 
projectId= 
+0

告訴我們如何你'POST'空或空值。什麼是您的HTML? – 2013-11-25 12:18:24

+0

@LutzHorn我已經包含在我的問題的編輯1中。謝謝 – user75ponic

回答

2

nullempty不能被解析爲一個32位有符號整數,並返回一個HTTP 400(客戶機錯誤)響應。

如果值不存在,則設置默認如下

@POST 
public void commitProjects( 
    @DefaultValue("0") @FormParam("projectId") int projectId 
    ) 

More Details

+0

看起來key-value不存在於請求中,意味着請求中缺少表單參數 – Shamse

+0

如果用戶沒有選擇任何值,form元素將爲null或爲空。 – user75ponic

+0

我的建議將直接從您的HTML表單中找到您的休息服務,以便您能夠解決問題。 – Shamse

2

使用@DefaultValue

@POST 
public void commitProjects(@FormParam("projectId") @DefaultValue("0") int projectId) 
+0

是的,它必須是一個字符串。感謝編輯。 – 2013-11-25 12:12:47

+0

我試過'@DefaultValue(「0」)',但它沒有幫助解決問題。 – user75ponic

+0

發佈您的HTMl代碼 – Shamse