programing

빈 RequestParam 값으로 defaultValue를 사용할 수 있습니까?

newsource 2022. 11. 26. 08:36

빈 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