2013-07-25 3 views
3

이 컨트롤러 메소드로 Spring MVC 애플리케이션이있다.Spring MVC - 필요없는 것으로 정의 된 누락 된 필드에 대한 HTTP 상태 코드 400 (잘못된 요청)

@RequestMapping(value = "/add", method = RequestMethod.POST) 
public String addNumber(@RequestParam(value="number", required=false) Long number) { 
    ... 
    return "redirect:/showAll/"; 
} 

내 JSP에는 위의 컨트롤러 메서드에 "number"라는 값을 게시하는 표준 HTML 양식이 있습니다. 컨트롤러 메소드 주석이 명확하게 정의하지만, 그러나 나는 값을 떠날 경우, (텍스트 필드에 아무 것도 입력하지 않음) 및 컨트롤러 방법은 브라우저를 호출하기 전에, 컨트롤러에 데이터를 POST

HTTP Status 400 - Required Long parameter 'number' is not present 

을 보여줍니다 "숫자"- 매개 변수는 이 아니며이 필요합니다.

어떤 일이 벌어 질 지 상상해보십시오.

감사합니다.

PS 다음과 같이 발생되는 예외이다

org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'number' is not present 

EDIT :이 스프링 3.2.3.RELEASE 버그 (see here)이다. 버전 3.1.4.RELEASE에서는 더 이상이 문제가 없습니다.

+0

게시 요청에 이름 매개 변수가 포함되어 있지 않다는 의미입니다. 불 덩어리 폭탄과 교차 확인하십시오. –

+0

죄송합니다. 본인의 실제 테스트 앱에서 오타가 발생했습니다. 위의 (편집 된) 예 에서처럼 "숫자"여야합니다. – xSNRG

+0

이상합니다. 방금 3.2.0.RELEASE 및 3.2.3.RELEASE로 테스트했으며 두 경우 모두 코드가 예상대로 작동합니다. – Bart

답변

9

동일한 상황이 발생했습니다. 매개 변수가 요청에 빈 값으로 표시되면 이런 현상이 발생합니다.

즉, POST 본문에 "number ="(값이 비어 있음)이 있으면 Spring에서이 예외를 throw합니다. 그러나 매개 변수가 요청에 전혀 표시되지 않으면 오류없이 작동합니다.

+0

그래, 총 버그 야? 2014 년에도이 문제가 계속되고 있습니다. – Fraggle

+1

이것은 Spring 4.1에서도 발생합니다. 그러나'RequestParam' 주석에'defaultValue'를 설정하면 예외가 발생하지 않습니다. –

+0

내 코드에서 JSON 개체를받는 중입니다. 문제는이 개체에 기본 생성자가 존재하지 않는다는 것입니다. 그것을 만든 후, 잘 작동합니다! – dellasavia