728x90
@RequestParam
스프링이 제공하는 어노테이션으로, 이를 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다
@ResponseBody
@RequestMapping("/request-param")
public String requestParamV2(
@RequestParam("username") String memberName,
@RequestParam("age") int memberAge
) {
log.info("username={}, age={}", memberName, memberAge);
return "ok";
}
@RequestParam
- 파라미터 이름으로 바인딩한다
- /request-param?username=yum&age=20
- 위처럼 요청이 들어오면, username=yum, age=20이 바인딩 된다
@ResponseBody
- 해당 어노테이션이 적용되면, @Controller 가 적용되었더라도 View 조회를 무시하고, HTTP message body에 직접 반환되는 string 값을 입력한다
@RequestParam 속성
- name(value)
- @RequestParam(”username”) String name
- 위의 경우 url에서 username으로 받은 파라미터가 name 변수에 저장된다
- 만약 HTTP 파라미터 이름이 변수 이름과 같은 경우 name(value) 속성은 생략 가능하다
- String, int, Integer 등의 단순 타입이면 @RequestParam 도 생략 가능하다 →
잘 쓰지는 않음..
💡 @RequestParam을 생략하면 스프링 MVC는 내부에서 required=false 를 적용하기 때문에, 반드시 파라미터를 입력해야 오류가 발생하지 않는다!
🌱 @RequestParam(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";
}
- required 옵션은 파라미터의 필수 여부를 결정한다
- 기본값이 파라미터 필수(true)여서 생략하면 파라미터를 반드시 입력해야 한다
- required = true 인 경우, 위와 같이 파라미터를 입력하지 않으면 400 Bad Request 예외가 발생한다
🌱 required=true에 파라미터 이름만 있고 값이 없는 경우(null)
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = true) String username
) {
log.info("username={}", username);
return "ok";
}
- 만약 파라미터의 이름만 있고 값이 없는 경우는 오류가 발생하지 않고 빈문자로 통과된다!
- 위처럼 오류 없이 통과하고 username에는 빈문자가 저장된다
🌱 required=true → 기본형(primitive)에 null 입력한 경우
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
@RequestParam(required = false) int age
) {
log.info("age={}", age);
return "ok";
}
- 만약 int, long, float 과 같은 기본형(primitive)에 null을 입력한 경우는 500 Server error 가 발생한다
- 위처럼 파라미터 이름도 없으면 500 에러가 발생한다
- 따라서 null을 받을 수 있는 참조형(Integer, Long..)으로 변경하거나, defaultValue를 사용한다
🌱 defaultValue
@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를 사용하면 기본값을 적용할 수 있다
- defaultValue가 적용된 경우, 이미 기본값이 있기 때문에 required는 의미가 없다!
- 위처럼 defaultValue는 빈 문자의 경우에도 설정한 기본값이 적용된다
🌱 requestParam → Map
@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";
}
- 파라미터를 Map, MultiValueMap으로 조회할 수 있다
- 파라미터의 값이 1개가 확실하다면 Map을 사용해도 되지만, 그렇지 않다면 MultiValueMap을 사용하자
💡 MultiValueMap
- 스프링이 제공하는 인터페이스이다
- 기존 Map과 달리, 하나의 key에 여러 value를 저장할 수 있다
[ 참고]
인프런(김영한) : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
728x90
'인프런 🍀' 카테고리의 다른 글
[스프링 핵심 원리 - 기본편] - 예제 만들기 (0) | 2022.10.14 |
---|---|
[스프링 핵심 원리 - 기본편] 객체 지향 설계와 스프링 (0) | 2022.09.22 |
[스프링 핵심 원리 - 기본편] 강의 소개 (0) | 2022.09.18 |
[스프링 입문] AOP (0) | 2022.09.11 |
[스프링 입문] 스프링 DB 접근 기술 (0) | 2022.09.11 |
댓글