Controller에서 사용되는 @RequestParam 대해서 알아보겠습니다.

@RequestParam: 클라이언트가 전달하는 HTTP 요청 Parameter 혹은 HTTP Body의 정보를 전달받기 위해서 사용됩니다. 

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
   
   @AliasFor("name")
   String value() default "";

   @AliasFor("value")
   String name() default "";

   boolean required() default true;

   String defaultValue() default ValueConstants.DEFAULT_NONE;
}

@RequestParam value, name 속성

value와 name은 Alias이고, 값을 바인딩할 때 사용됩니다. Alias이므로 속성을 명시해주면 됩니다. 하지만 요청하는 변수명과 바인딩할 변수명이 같다면 생략 가능합니다. 또한 여러 개의 @RequestParam을 사용 가능합니다. 

// 변수명 명시
@GetMapping("/requestParam")
public String requestParam(@RequestParam("str") String str) { // /requestParam?str= or HTTP body에 보내기
    return str;
}

// 변수명 생략
@GetMapping("/requestParam")
public String requestParam(@RequestParam String str) { // /requestParam?str= or HTTP body에 보내기
    return str;
}
// 값 여러 개 받기
@GetMapping("/requestParam")
public String requestParam(@RequestParam String str,
                           @RequestParam int size) {
    return str+" "+size;
}

@RequestParam required 속성

required 속성은 바인딩 여부를 결정합니다. default가 true이므로 속성을 설정하지 않는다면 반드시 넘겨줘야 합니다. 하지만 false를 준다면, 넘겨주지 않아도 무방합니다.

// required 속성을 default가 true이므로 str을 넘겨주지 않는다면 오류 발생
@GetMapping("/requestParam")
public String requestParam(@RequestParam String str) {
    return str;
}

// required 속성을 false로 명시하였기에 오류 발생x
@GetMapping("/requestParam")
public String requestParam(@RequestParam(required = false) String str) {
    return str;
}

@RequestParam defaultValue 속성

요청이 들어오고 바인딩할 값이 없을 경우 임의로 값을 넣어주는 역할을 합니다. required = false를 설정하지 않아도 오류가 발생하지 않습니다.

// str의 값이 넘어오지 않았을 경우 10을 넣어주고, 오류를 발생시키지 않습니다. 
@GetMapping("/requestParam")
public String requestParam(@RequestParam(defaultValue = "10") String str) {
    return str;
}

지금까지 @RequestParam에 대해서 알아봤습니다. 클라이언트에서 요청하는 값이 여러 개라면 @RequestParam을 여러 개 사용해야 하지만 @ModelAttribute를 사용한다면 간편하게 처리가 가능합니다. 다음은 @ModelAttribute에 대해서 알아보겠습니다. 감사합니다.