Controller에서 다양한 타입으로 Request 요청받기 (PathVariable, RequestParam, ModelAttribute, RequestBody)
컨트롤러에서 request 들을 다양한 타입으로 받을 수 있다.
1. Servlet API
- ServletRequest, ServletResponse
- HttpServletRequest, HttpServletResponse : 위에꺼를 상속받음
- HttpServletRequest.getInputStream() : InputStream, Reader 등을 얻을 수 있다.
- HttpServletResponse.getOutputStream() : OutputStream, Writer 등을 얻을 수 있다.
- HttpSession : HttpServletRequest 에서 세션관련한 것들만 있음
2. Spring API
- WebRequest : HttpServletRequest 와 비슷하지만 Servlet 과 의존성이 없다
- org.springframework.web.context.request.WebRequest
- MultipartRequest : 파일 업로드
- org.springframework.web.multipart.MultipartRequest
3. Spring Annotation
- 대부분 생략이 가능한 것들이 많은데 가독성을 위해 왠만하면 다 적어주는게 좋다.
- 거의 org.springframework.web.bind.annotation 경로에 있다.
- @PathVariable : 중괄호에 명시된 값을 변수로 받는다.
- @RequestMapping("/user/{id}")
- public String userInfo(@PathVariable("id") String id)
- @RequestParam : http 요청 파라미터를 변수로 받는다.
- @RequestParam(value = "page", required = false, defaultValue = "1") Integer page
- required 와 defaultValue 사용가능, required = true 인데 요청 필드가없으면 400 에러
- 요청예제. ?page=3
- 원시타입일 경우 어노테이션안붙여도 자동으로 알아먹음
- @ModelAttribute : http 요청 파라미터를 VO로 받는다.
- public ModelAndView search(@ModelAttribute User user)
- 레퍼런스타입일 경우 어노테이션안붙여도 자동으로 알아먹음. 즉 원시타입은 RequestParam으로, 객체타입은 ModelAttribute 로
- 요청 파라미터가 많을경우 VO로 받는게 가독성이나 코드효율 상 좋다.
- 이걸 커맨드 객체라고도 한다.
- 메소드 레벨에서 annotation을 선언하면 ModelMap.addAttribute 와 같은 기능을 한다.
- ex. @ModelAttribute("users") 이면 ModelMap.addAttribute("users", 메소드의 리턴값)
- @RequestBody : HTTP 요청의 body 부분을 그대로 변수에 넣는다. XML, JSON 일떄 이것을 주로 사용한다.
- public String message(@RequestBody KakaobotRequest request)
- 예를들어 json 구조처럼 KakaobotRequest.java 를 맞춘다면 파싱해서 잘 들어갈 것이다.
- @CookieValue : 요청의 쿠키정보를 가져온다
- @RequestHeader : 요청헤더 정보를 가져온다
- @RequestHeader("host") String host
출처: https://sjh836.tistory.com/143?category=680970 [빨간색코딩]
'Spring Framework > Spring Core' 카테고리의 다른 글
[Spring] 스프링 예제 프로젝트 PetClinic 빌드 및 실행하기 (0) | 2021.04.21 |
---|---|
spring websocket (polling, Handshake 과정, sockjs, webSocketHandler, 예제) (0) | 2021.03.23 |
spring의 다양한 intercept 방법 (Servlet Filter, HandlerInterceptor, PreHandle, AOP) (0) | 2021.03.23 |
Spring AOP (개념, 용어, 원리, 포인트컷 표현식, JoinPoint API) (0) | 2021.03.22 |
lombok (롬복의 특징, annotations) (0) | 2021.03.22 |
EHCache (ehcache-spring-annotations, ehcache.xml, @Cacheable) (0) | 2021.03.22 |
스프링프레임워크로 카카오 챗봇 만들기 (0) | 2021.03.22 |
HandlerMethodArgumentResolverComposite Class Composite 패턴 (0) | 2020.09.03 |