RESTful @FormParam 400 Bad Request

时间:2013-11-25 12:01:33

标签: java rest jersey http-status-code-400 jdk1.5

我有HTML表单数据并被传递给RESTful POST方法。我注意到如果@FormParam被声明为

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

如果projectId为null或为空,那么从浏览器执行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=

2 个答案:

答案 0 :(得分:2)

使用@DefaultValue

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

答案 1 :(得分:2)

无法将

nullempty解析为32位有符号整数,并返回HTTP 400(客户端错误)响应。

如果值不存在,则设置默认值如下

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

More Details