Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- QueryDSL
- Thymeleaf
- jpa
- pointcut
- springdatajpa
- Exception
- Spring Boot
- Android
- 백준
- spring
- kotlin
- JPQL
- 그리디
- 스프링
- 자바
- 인프런
- 김영한
- db
- Greedy
- Servlet
- 스프링 핵심 원리
- 알고리즘
- java
- 스프링 핵심 기능
- JDBC
- http
- SpringBoot
- AOP
- transaction
- Proxy
Archives
- Today
- Total
개발자되기 프로젝트
HTTP 요청 파라미터 - @RequestParam 본문
1. @RequestParam
- @RequestParam을 사용하면 paramter를 쉽게 조회가 가능
- @RequestParam("username") String memberName
- = request.getParameter("username")
- @ResponseBody
- @Controller의 경우 String을 반환하면 해당 String으로 View를 찾는다.
- 하지만 @ResponseBody를 적용하면 return 값을 메시지 바디에 넣는다.
@Slf4j
@Controller
public class RequestParamController {
@ResponseBody //얘를 넣으면 응답메시지에 값넣어서 return, @Controller여도 String으로 view찾지 않음.
@RequestMapping("/request-param-v2")
public String requestParamV2(@RequestParam("username") String memberName,
@RequestParam("age") int memberAge){
log.info("mamberName = {}, memberAge= {}", memberName, memberAge);
return "ok";
}
}
2. 생략 가능 ㅋㅋ
- 요청 Paramter 명과 변수명이 같으면 @RequestParam("~~") 생략 가능
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(@RequestParam String username,
@RequestParam int age){
log.info("username = {}, age= {}", username, age);
return "ok";
}
- 이렇게도 생략 가능
- 요청 parameter명과 변수명이 같고
- String , int , Integer 등의 단순 타입은
- @RequestParam자체를 생략 가능 ㅋㅋㅋㅋㅋ
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username,
int age){
log.info("username = {}, age= {}", username, age);
return "ok";
}
3. requestParamRequired , 필수 파라미터 여부
- @RequestParam의 required 옵션
- required = true : 필수 값
- required = false : 없어도 됨 ㅋㅋ
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(@RequestParam(value = "username", required = true) String username,
@RequestParam(value = "age", required = false) int age){
log.info("username = {}, age= {}", username, age);
return "ok";
}
- 어? 근데 age가 required=false이면 null도 들어가야 하는데..?
- int의 경우 Integer로 바꿔야함 ㅋㅋㅋㅋ
- Integer는 객체임. null 가능
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(@RequestParam(value = "username", required = true) String username,
@RequestParam(value = "age", required = false) Integer age){
log.info("username = {}, age= {}", username, age);
return "ok";
}
4. null vs ""
- 위의 예제에 대해서 username을 아예 전달을 안하는 경우
- username=""로 전달하는 경우 뭐가 다름?
- username이 null 인경우
- http://localhost:8080/request-param-required
- 400에러 발생.
2021-09-14 21:24:48.983 WARN 19520 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException\
: Required request parameter 'username' for method parameter type String is not present]
- username="" ->빈문자
- http://localhost:8080/request-param-required?username=
- 빈문자가 전달되기 때문에 통과함. -> 결국 값이 들어온거임 ㅋㅋㅋ
2021-09-14 21:27:00.374 INFO 19520 --- [nio-8080-exec-3] h.s.b.request.RequestParamController
: username = , age= null
5. DefaultValue
- 값이 없을 경우 사용할 기본 값.
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault(@RequestParam(value = "username", required = true, defaultValue = "guest") String username,
@RequestParam(value = "age", required = false, defaultValue = "-100") int age){
log.info("username = {}, age= {}", username, age);
return "ok";
}
- username와 age를 전달하지 말아보자.
- http://localhost:8080/request-param-default
- default로 지정한 값이 들어감 ㅋㅋㅋ
- required가 무의미해짐.
2021-09-14 21:31:39.653 INFO 39820 --- [nio-8080-exec-3] h.s.b.request.RequestParamController
: username = guest, age= -100
- username=""로 전달한 경우? 즉 빈문자를 전달하는 경우?
- http://localhost:8080/request-param-default?username=
- 빈문자도 defulat값으로 입력된다 ㅋㅋㅋ
2021-09-14 21:31:39.653 INFO 39820 --- [nio-8080-exec-3] h.s.b.request.RequestParamController
: username = guest, age= -100
6. 파라미터를 Map으로 조회하기 - requestParamMap
- 모든 요청 파라미터 받기
- @RequestParam Map<String, Object> paramMap
- 파라미터 꺼내기 -> paramMap.get(key)
@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";
}
- MultiValueMap으로도 조회가 가능.
- 해당 파라미터의 값이 1개가 아닐거 같으면.. MultiValueMap사용 ㅋㅋ
- 보통 1개씀..ㅋㅋ
MultiValueMap(key=[value1, value2, ...] ex) (key=userIds, value=[id1, id2])
7. GitHub : 210914 @RequestParam
'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글
HTTP 요청 메시지 - 단순 텍스트 (0) | 2021.09.14 |
---|---|
HTTP 요청 파라미터 - @ModelAttribute (0) | 2021.09.14 |
HTTP 요청 파라미터 - 쿼리 파라미터, HTML, Form (0) | 2021.09.14 |
HTTP 요청 - Header 조회 (0) | 2021.09.14 |
RequestMapping - API (0) | 2021.09.14 |
Comments