복붙노트

[SPRING] 빈 RequestParam 값을 defaultValue 사용할 수 있습니까?

SPRING

빈 RequestParam 값을 defaultValue 사용할 수 있습니까?

다음과 비슷한 요청 매핑이있는 경우

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}

그런 다음이 요청을 다음과 같이 호출하십시오.

http://example.com/test?i=

오류 메시지가 나타납니다.

자바 매개 변수 클라이언트가 빈 매개 변수를 보내지 못하도록 막거나 문자열 값을 수락하여 빈 문자열을 찾지 못하는 경우에만 구문 분석하여이 문제를 해결할 수 있습니다.

업데이트 : 스프링의 최신 버전이 이제 원래 원하는 동작을 구현합니다.

방금 봄 4.3.5에서 이것을 테스트했으며 NumberFormatException을 발생시키지 않고 null 값을 기본값으로 바꾸는 것을 발견했습니다. 내 원래의 매핑이 제대로 작동합니다.

이 행동 변화가 일어난 스프링의 버전이 확실하지 않습니다.

해결법

  1. ==============================

    1.@RequestParam 유형을 Integer로 변경하여 필요하지 않게 만들 수 있습니다. 이렇게하면 요청이 성공할 수 있지만 null이됩니다. 컨트롤러 메소드에서이를 명시 적으로 디폴트 값으로 설정할 수 있습니다.

    @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
    
  2. ==============================

    2.기본 값을 설정하여 기본 유형을 유지할 수 있습니다.이 경우 "required = false"속성을 추가하십시오.

    기본 값을 설정하여 기본 유형을 유지할 수 있습니다.이 경우 "required = false"속성을 추가하십시오.

    @RequestParam(value = "i", required = false, defaultValue = "10") int i
    

    추신 Spring 문서의이 페이지는 유용 할 것이다. 주석 유형 RequestParam

  3. ==============================

    3.int 대신 제네릭 클래스 Integer를 사용하여 RequestParam을 설정하면 문제가 해결됩니다.

    int 대신 제네릭 클래스 Integer를 사용하여 RequestParam을 설정하면 문제가 해결됩니다.

       @RequestParam(value= "i", defaultValue = "20") Integer i
    
  4. ==============================

    4.당신은 또한 이런 식으로 할 수 있습니다 -

    당신은 또한 이런 식으로 할 수 있습니다 -

     @RequestParam(value= "i", defaultValue = "20") Optional<Integer> i
    
  5. ==============================

    5.이것은 2013 년에 버그로 간주되었습니다. https://jira.spring.io/browse/SPR-10180

    이것은 2013 년에 버그로 간주되었습니다. https://jira.spring.io/browse/SPR-10180

    버전 3.2.2로 수정되었습니다. 그 이후의 버전에서는 문제가 발생하지 않아야하며 코드가 정상적으로 작동해야합니다.

  6. from https://stackoverflow.com/questions/12296642/is-it-possible-to-have-empty-requestparam-values-use-the-defaultvalue by cc-by-sa and MIT license