JAVA

HTTP 요청 파라미터 - @RequestParam

Strickland 2024. 4. 30. 09:19

쿼리스트링, form-data, x-www-form-urlencoded 

 

메시지 바디가 텍스트 형태면 받지 못함!

 

위의 3가지 데이터는 @RequestParam 어노테이션으로 데이터를 받을 수 있다

 

package hello.springmvc.basic.requestmapping;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Slf4j
@Controller
public class RequestParamController {

    @RequestMapping("/request-param-v2")
    @ResponseBody
    public String requestParamV2(
            @RequestParam("username") String memberName,
            @RequestParam(value = "age", required = false) Integer memberAge
    ) {
        log.info("username={}, age={}", memberName, memberAge);

        return "ok";

    }
}
  • @RequestParam : 파라미터 이름으로 바인딩
  • @ResponseBody : View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력
    • @Controller 어노테이션 안에서 선언하면됨.

@RequestParam의 name(value) 속성이 파라미터 이름으로 사용

@RequestParam("username") String memberName 

required 속성이 false 면 Null 값이 가능하기 때문에 파라미터를 wrapper 클래스 형태로 선언 해야함.

(500 예외 발생) 따라서 null 을 받을 수 있는 Integer 로 변경하거나, defaultValue 사

required 속성은 default 로 true임

 

 

 

@RequesParam("username") -> @RequestParam 축약가능 

but 변수 이름이 요청 파라미터 이름과 동일해야함 

 

더 축약을 하면 아래 코드와 같다

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

        return "ok";

    }

주의

@RequestParam 애노테이션을 생략하면 스프링 MVC는 내부에서 required=false 를 적용한다.

 

이렇게 애노테이션을 완전히 생략해도 되는데, 너무 없는 것도 약간 과하다.

@RequestParam 이 있으면 명확하게 요청 파리미터에서 데이터를 읽는 다는 것을 알 수 있다  

 

주의! - 파라미터 이름만 사용

/request-param-required?username=

파라미터 이름만 있고 값이 없는 경우 빈문자로 통과

 

 

기본 값 적용 - requestParamDefault

/**
 * @RequestParam
 * - defaultValue 사용
 *
 * 참고: defaultValue는 빈 문자의 경우에도 적용
 * /request-param-default?username=
 */
@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";
}

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

이미 기본 값이 있기 때문에 required 는 의미가 없다.

defaultValue 는 빈 문자의 경우에도 설정한 기본 값이 적용된다.

 

 

파라미터를 Map으로 조회하기 - requestParamMap

    @ResponseBody
    @RequestMapping("/request-param-map")
    public String requestParamMap(@RequestParam Map<String, Object> paramMap) {
        log.info("username={}, age={}", paramMap.get("username"),
                paramMap.get("age"));
        return "ok";
    }
  • @RequestParam Map
    • Map(key=value)
  • @RequestParam MultiValueMap
    • MultiValueMap(key=[value1, value2, ...]
    • ex) (key=userIds, value=[id1, id2])

'JAVA' 카테고리의 다른 글

HTTP 요청 메시지 - 단순 텍스트  (0) 2024.04.30
HTTP 요청 파라미터 - @ModelAttribute  (0) 2024.04.30
HTTP 헤더 조회  (0) 2024.04.29
요청 매핑  (0) 2024.04.29
@Slf4j  (0) 2024.04.29