빨간색코딩

Controller에서 다양한 타입으로 Request 요청받기 (PathVariable, RequestParam, ModelAttribute, RequestBody) 본문

Spring

Controller에서 다양한 타입으로 Request 요청받기 (PathVariable, RequestParam, ModelAttribute, RequestBody)

빨간색소년 2018. 4. 1. 19:33

컨트롤러에서 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


Comments