티스토리 뷰
반응형
request를 받는 controller를 만들어보자
가장 초기의 형태로는 직접 request, response 객체를 받는 방법이다.
@RequestMapping("/requset-param-v1") public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws IOException{ String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); log.info("username={}, age={}", username, age); response.getWriter().write("ok"); }
스프링은 이를 @RequestParam이라는 어노테이션을 통해서 직접 request 변수를 받을 수 있다.
@ResponseBody @RequestMapping("/request-param-v2") public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge){ log.info("username={}, age={}", memberName, memberAge); return "ok"; }
@RequestParam에 들어가는 변수의 이름은 request로 요청받은 변수이름으로 해주면 매칭이 된다.
@ResponseBody는 return값을 직접 화면에 뿌려주는 역할을 한다. class에 @RestController를 붙혀줬다면 생략해도 무방하다.
또한, @RequestParam의 변수와 method의 변수명이 같다면 다음과 같이 생략이 가능하다.
@ResponseBody @RequestMapping("/request-param-v3") public String requestParamV3( @RequestParam String username, @RequestParam int age){ log.info("username={}, age={}", username, age); return "ok"; }
마지막으로 @RequsetParam도 생략이 가능하나, 가독성으로 인해 비추천한다고 한다.
@RequestParam
required = [true / false] : request 요청시 꼭 넣어줘야하는 변수인지 아닌지.
defaultValue = " " : 요청 변수가 없을 시에 default로 들어가게 되는 값.
다음과 같이 하나하나 변수를 지정해서 받아줄 수 있지만, Map 자료형을 통해서 요청이 오는 모든 변수를 받아줄 수도 있다.
@ResponseBody @RequestMapping("/request-attribute-v1-temp") public String modelAttributeV1Temp(@RequestParam String username, @RequestParam int age){ HelloData helloData = new HelloData(); helloData.setAge(age); helloData.setUsername(username); log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); log.info("helloData={}", helloData); return "ok"; }
마지막으로 가장 많이 사용하게 되는 형식인데, 요청변수로 오는 객체를 만들어서 넣어주는 것이다.
이때는 @ModelAttribute 어노테이션을 쓰게 된다.
ModelAttribute를 사용하게 되면 해당 객체에서 getter, setter를 찾아 값을 삽입해주게 된다.
따라서 사용자가 따로 객체에 값을 넣어줄 필요가 없다.
@ResponseBody @RequestMapping("/request-attribute-v1") public String modelAttributeV1(@ModelAttribute HelloData helloData){ log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); log.info("helloData={}", helloData); return "ok"; } // ModelAttribute는 생략가능하다. // 단순한 타입: RequestParam, 다른 타입: ModelAttribute로 번역 @ResponseBody @RequestMapping("/request-attribute-v2") public String modelAttributeV2(HelloData helloData){ log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); log.info("helloData={}", helloData); return "ok"; }
728x90
반응형
'Back End > Spring' 카테고리의 다른 글
[Spring] prototype scope 사용 예시 (0) | 2024.02.15 |
---|---|
[Spring] Spring에서 Proxy 객체를 사용하는 경우 (0) | 2024.02.15 |
[Web MVC] API 만들기 - 1 (0) | 2023.03.06 |
[API] 3. Spring Boot - Naver API 호출(POST) (0) | 2022.09.01 |
[API] 3. Spring Boot - Naver API 호출(GET) (0) | 2022.09.01 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- cs
- K8S
- Producer
- backend
- KAFKA
- rhel
- centos
- Firebase
- OS
- API
- React
- Container
- feign client
- broker
- frontend
- caching
- zookeeper
- consumer
- NextJS
- Front
- apache
- apache kafka
- Java
- 프론트엔드
- Linux
- spring
- spring boot
- 리액트
- Data Engineering
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
250x250