Adventure Time - Lady Rainicorn @RequestParam
본문 바로가기
💻공부/Spring 🍃

@RequestParam

by 강켄트 2023. 5. 12.

 

스프링이 제공하는 @RequestParam 사용하면 요청 파라미터를 편리하게 사용할 수 있다. 

 

@Controller
@Slf4j
public class RequestParamController {

   ...
   
   @RequestMapping("/request-param-v2")
      public String requestParamV2(
        @RequestParam("username") String memberName,
        @RequestParam("age") int memberAge){

      log.info("username={}, age={}", memberName, memberAge);
      return "ok";
   }
}

 

@RequestParam : 파라미터 이름으로 바인딩 

@RequestParam("username") String memberName, @Request("age") int memberAge는

아래 호출 URL에서 key와 같다.(username, age) 

@RequestParam("username") String memberName 은 다음과 같은 것이다.

👉 request.getParameter("username");

로그 출력 결과

 

 

HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam("HTTP 파라미터 이름") 👈 요 부분이 생략 가능하다.

    @ResponseBody
    @RequestMapping("/request-param-v3")
    public String requestParamV3(
            //@RequestParam("username") String username,
            //@RequestParam("age") int age){
            @RequestParam String username,
            @RequestParam int age){

        log.info("username={}, age={}", username, age);
        return "ok";
    }

 

+ String, int, Integer 등의 단순 타입이면 @RequestParam 도 생략 가능하다.

즉, 단순 타입이면 @RequestParam을 적지 않아도 적용이 되는 것이다. 

  @ResponseBody
    @RequestMapping("/request-param-v4")
    public String requestParamV4(String username, int age){
        log.info("username={}, age={}", username, age);
        return "ok";
    }

 

🤨 어노테이션을 너무 생략하면 직관적이지 않기 때문에 어노테이션을 사용해 명확히 보여주는 것이 더 나을 것 같다.

 

 

 

required

@RequestParam에 required를 적으면 파라미터의 필수 여부를 나타낸다.

기본값은 파라미터 필수인 true이다. 

@RequestParam(required = true)

 

다음과 같은 코드가 있을 때 

username은 required = true 이므로 파라미터가 필수이고

age는 required = false 이므로 파라미터가 필수가 아니다. 

   @ResponseBody
   @RequestMapping("/request-param-required")
    public String requestParamRequired(
            @RequestParam(required = true) String username,
            @RequestParam(required = false) int age){

        log.info("username={}, age={}", username, age);
        return "ok";
    }

 

age 파라미터는 필수가 아니니까 다음과 같이 호출했는데 에러가 발생했다.

 

이유는 @RequestParam(required = false) int age 코드를 보면 알 수 있다.

변수 age의 타입이 int이기 때문에 null 값이 들어가 에러가 난 것이다.

 

변수 age를 Integer로 변경해 주면 

age 값을 넣어 호출하지 않아도 required = false 이기 때문에 정상 호출된다.

defaultValue

파라미터에 값이 없는 경우 defaultValue를 사용하면 설정한 기본 값으로 적용할 수 있다. 

설정한 기본값이 이미 있기 때문에 defaultValud에 required를 사용하는 건 의미가 없다. 

 

    @ResponseBody
    @RequestMapping("/request-param-default")
    public String requestParamDefault(
            @RequestParam(required = true, defaultValue = "guest") String username,
            @RequestParam(required = false, defaultValue = "-1") int age){

        log.info("username={}, age={}", username, age);
        return "ok";
    }

 

username, age 값 없이 호출했지만, required의 true, false 여부와 관계없이 호출에 성공했다. 

 

대신 defaultValue로 설정한 값이 username, age에 출력됬다. 

'💻공부 > Spring 🍃' 카테고리의 다른 글

@ModelAttribute  (0) 2023.05.12
요청에 관하여  (0) 2023.05.11
로깅로깅  (0) 2023.05.11
서블릿(Servlet)  (0) 2023.02.19
URL 인코딩  (0) 2023.02.11

댓글