2013-11-25 159 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