2016-02-16 4 views
2

У меня возникла проблема, когда Spring дает мне RequestParams, которые являются нулевыми, хотя я считаю, что запрос Http содержит переменные и отформатирован правильно.Java Spring RequestParam is null

Адресный код.

@RequestMapping(value="/{username}/party/{partymember}",method=RequestMethod.PUT, produces="application/json", consumes="application/x-www-form-urlencoded") 
public ResponseEntity<String> updatePartyMember(@PathVariable String username, 
               @PathVariable String partymember, 
               @RequestParam(value="membername", required=false) String newMemberName, 
               @RequestParam(value="job", required=false) String newJob) 

Вот еще одна функция, которая работает правильно.

@RequestMapping(value="/{username}/party", method=RequestMethod.POST, produces="application/json", consumes="application/x-www-form-urlencoded") 
public ResponseEntity<String> addPartyMember(@PathVariable String username, 
              @RequestParam(value="membername", required=false) String partyMemberName, 
              @RequestParam(value="job", required=false) String partyMemberJob) 

При отладке я взял рабочий запрос для второй функции и изменил только адрес и запрос метод, и я был в состоянии вызвать первую функцию. Это приводит меня к мысли, что нет ничего плохого в запросах, которые я отправил на сервер.

+0

Каков ответ с сервера? 404, 400 или что-то еще? – Enrichman

+0

Я обрабатываю коды вручную. Однако, если я удалю require = false, я получаю эту ошибку «HTTP Status 400 - Required String parameter« membername »нет» – user5937270

ответ

2

Весна обрабатывает параметры запроса только для методов GET и POST. Если вы используете PUT, вам необходимо передать данные с помощью @RequestBody.

+0

Это не похоже на правильное поведение. Если это так, то, вероятно, стоит подняться на Spring JIRA. – chrylis

+1

Для этого существуют проблемы JIRA. Когда используется примечание Spring @RequestParam, параметр извлекается из запроса с помощью 'HttpServletRequest.getParameter()', и этот метод не выставляет параметры, когда HTTP-метод PUT. Это не до весны, а реализация API сервлета. Я нашел информацию, что причиной этого может быть то, что спецификация метода PUT не описывает параметры, поэтому, возможно, именно поэтому Servlet API ведет себя таким образом. –