빈 RequestParam 값으로 defaultValue를 사용할 수 있습니까?
다음과 같은 요청 매핑이 있는 경우:
@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:입력 문자열의 경우: " "
javascript 클라이언트의 빈 파라미터 송신을 정지하거나 문자열 값을 받아들여 공백이 아닌 경우에만 해석함으로써 해결할 수 있습니다.
업데이트: 봄의 최신 버전에서는 원래 원하는 동작이 구현되었습니다.
저는 이것을 봄 4.3.5에 방금 테스트했습니다만, 이 동작에 의해서, 실제로는 null 값이 디폴트치로 변화해 버립니다.NumberFormatException
따라서 원래 맵핑은 정상적으로 동작합니다.
나는 이러한 행동 변화가 어느 버전의 봄에 이루어졌는지 확신하지 못한다.
@RequestParam 유형을 Integer로 변경하여 필요하지 않게 할 수 있습니다.이렇게 하면 요청이 성공하지만 무효가 됩니다.컨트롤러 방식으로 명시적으로 기본값으로 설정할 수 있습니다.
@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 설명서의 이 페이지는 유용할 수 있습니다. 주석 유형 RequestParam
RequestParam을 설정할 수 있습니다.int 대신 일반 클래스 Integer를 사용하면 문제가 해결됩니다.
@RequestParam(value= "i", defaultValue = "20") Integer i
사용할 수 있습니다.@Nullable
디폴트값으로 설정합니다.
@Nullable @RequestParam(value = "i", defaultValue = "10") Integer i
이런 것도 할 수 있어요.
@RequestParam(value= "i", defaultValue = "20") Optional<Integer> i
이것은 2013년에 버그로 간주되었습니다.https://jira.spring.io/browse/SPR-10180
버전 3.2.2에서 수정되었습니다.이후 버전에서는 문제가 발생하지 않으며 코드는 정상적으로 작동합니다.
언급URL : https://stackoverflow.com/questions/12296642/is-it-possible-to-have-empty-requestparam-values-use-the-defaultvalue
'programing' 카테고리의 다른 글
Windows에 erpnext를 설치하는 방법 (0) | 2022.11.26 |
---|---|
Mockito - Nullpointerstubbing 메서드에서의 예외 (0) | 2022.11.26 |
HTML 텍스트 입력은 숫자 입력만 허용 (0) | 2022.11.26 |
MariaDB 10.1.21 Galera 클러스터가 "Cannot create test file" / datadir confusion" 오류와 함께 시작되지 않음 (0) | 2022.11.17 |
Vuex 스토어에서 모든 인스턴스를 업데이트합니다. 현재 인스턴스만 업데이트하십시오. (0) | 2022.11.17 |