다음과 유사한 요청 매핑이있는 경우 :
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
그런 다음이 요청을 다음과 같이 호출합니다.
http://example.com/test?i=
오류 메시지가 나타납니다.
‘java.lang.String’유형의 값을 ‘int’유형으로 변환하지 못했습니다. 중첩 된 예외 : java.lang.NumberFormatException : 입력 문자열 : “” ‘
자바 스크립트 클라이언트가 빈 매개 변수를 보내지 못하도록하거나 문자열 값을 받아들이고 비어 있지 않은 경우에만 구문 분석하여이 문제를 해결할 수 있습니다.
업데이트 : 이후 버전의 봄은 이제 원래 원하는 동작을 구현합니다.
나는 방금 봄 4.3.5에서 이것을 테스트했으며 이제 동작이 실제로는를 올리지 않고 null 값을 기본값으로 바꾸는 것을 발견했습니다 NumberFormatException
. 내 원래 매핑이 이제 제대로 작동합니다.
이 동작이 변경된 봄 버전을 잘 모르겠습니다.
답변
@RequestParam 유형을 Integer로 변경하고 필요하지 않게 만들 수 있습니다. 이렇게하면 요청이 성공할 수 있지만 그러면 null이됩니다. 컨트롤러 메서드에서 명시 적으로 기본값으로 설정할 수 있습니다.
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", required=false) Integer i) {
if(i == null) {
i = 10;
}
// ...
}
위의 예에서 defaultValue를 제거했지만, 전혀 설정되지 않은 요청을 수신 할 것으로 예상되는 경우 포함 할 수 있습니다.
http://example.com/test
답변
기본값을 설정하여 기본 유형을 유지할 수 있습니다. 귀하의 경우에는 “required = false” 속성 만 추가하면 됩니다.
@RequestParam(value = "i", required = false, defaultValue = "10") int i
추신 : Spring 문서의이 페이지는 유용 할 수 있습니다 :
Annotation Type RequestParam
답변
int 대신 일반 클래스 Integer를 사용하여 RequestParam을 설정할 수 있습니다. 그러면 문제가 해결됩니다.
@RequestParam(value= "i", defaultValue = "20") Integer i
답변
다음과 같이 할 수도 있습니다.
@RequestParam(value= "i", defaultValue = "20") Optional<Integer> i
답변
이것은 2013 년에 버그로 간주되었습니다 : https://jira.spring.io/browse/SPR-10180
버전 3.2.2로 수정되었습니다. 그 이후에는 어떤 버전에서도 문제가 발생하지 않아야하며 코드는 정상적으로 작동합니다.