RESTful @FormParam 400 Неверный запрос

У меня есть данные 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=

person Jacob    schedule 25.11.2013    source источник
comment
Покажите нам, как вы POST получаете нулевое или пустое значение. Какой у вас HTML?   -  person    schedule 25.11.2013
comment
@LutzHorn Я включил в Edit 1 моего вопроса. Спасибо   -  person Jacob    schedule 25.11.2013


Ответы (2)


null или empty нельзя проанализировать как 32-битное целое число со знаком, и возвращается ответ HTTP 400 (ошибка клиента).

если значение не существует, установите значение по умолчанию следующим образом

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

Подробнее

person Shamse Alam    schedule 25.11.2013
comment
Кажется, что ключ-значение отсутствует в запросе, означает, что в запросе отсутствует параметр формы - person Shamse Alam; 25.11.2013
comment
Если пользователь не выбрал никакого значения, элемент формы будет нулевым или пустым. - person Jacob; 25.11.2013
comment
Мое предложение будет напрямую связано с вашей службой отдыха из вашей HTML-формы, чтобы вы могли получить проблемы. - person Shamse Alam; 25.11.2013

Используйте @DefaultValue:

@POST
public void commitProjects(@FormParam("projectId") @DefaultValue("0") int projectId)
person Community    schedule 25.11.2013
comment
Я пробовал @DefaultValue("0"), однако это не помогло решить проблему. - person Jacob; 25.11.2013