1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (186)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (26)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

🌱 SPRING

@MVC : RequestMapping

2018. 3. 29. 11:16

@RequestMapping

@MVC의 핸들러 매핑은 DefaultAnnotationHandlerMapping을 이용하는데, 이것의 핵심은 매핑 정보로 @RequestMapping 어노테이션을 활용한다는 점이다. DefaultAnnotationHandlerMapping은 디폴트이기 때문에 다른 핸들러 매핑 bean을 명시적으로 등록하지 않았다면 기본적으로 사용할 수 있다. 다만, 다른 핸들러 매핑 빈 등록시 빈으로 등록해줘야한다.


아래 어노테이션을 예시로 하나씩 살펴보자.

@RequestMapping(value="/main", method=RequestMethod.GET, params="type=user", headers="content-type=text/html")

디폴트 엘리먼트인 value는 String 배열 타입으로, URL 패턴을 지정한다.

만약 요청 URI가 "/main.do" 라면

1
2
3
@RequestMapping("/main")
@RequestMapping("/main*")
@RequestMapping("/main.*")
cs

이렇게 요청을 받아올 수 있고, 배열이기 때문에 

1
@RequestMapping({"/main", "/index"})
cs

이런 형태도 가능하다.


@RequestMapping에서는 {}를 이용해 URI 템플릿을 만들어 {}위치에 해당하는 내용을 컨트롤러 메서드에서 파라미터로 취득할 수 있다. {}에 들어가는 이름을 패스변수라고 부르며, 하나 이상 등록할 수 있다.

1
@RequestMapping("/main/{userType}")
cs


@RequestMapping(value="/main", method=RequestMethod.GET, params="type=user", headers="content-type=text/html")

method에는 GET/HEAD/POST/PUT/DELETE/OPTIONS/TRACE 7개의 HTTP 메서드가 위치한다. 같은 URI이어도, method를 다르게 분기해 매핑하면 요청의 메서드에 따라 해당 요청을 처리하는 메서드를 선택할 수 있다. 배열형태로 사용 가능하다.

1
2
@RequestMapping(value="/main", method=RequestMethod.GET)
@RequestMapping(value="/main", method=RequestMethod.POST)
cs


@RequestMapping(value="/main", method=RequestMethod.GET, params="type=user", headers="content-type=text/html")

params를 이용하면 요청 파라메터에 따라 분기처리가 가능하다

1
2
@RequestMapping(value="/main", params="type=admin")
@RequestMapping(value="/main", params="type=user")
cs


만약 @RequestMapping(value="/main") 이 하나 추가됬을 때, /main?type=admin 요청이 들어왔을 때에는 좀 더 상세한, @RequestMapping(value="/main", params="type=admin") 이 요청을 처리하게된다.


특정 파라메터가 존재하지 않아야 한다면 

1
@RequestMapping(value="/main", params="!type")
cs

이런 식으로 사용하면 된다.


@RequestMapping(value="/main", method=RequestMethod.GET, params="type=user", headers="content-type=text/html")

Headers는 HTTP의 헤더 정보이다. 헤더명=값 형식으로 입력한다.


매핑 레벨

@RequestMapping은 메서드와 타입레벨에 사용가능한데, 두가지 위치에서 모두 사용할 경우 타입 + 메서드 형태로 결합된다.

/main/test 요청을 기준으로 살펴보자.


1
2
3
4
5
6
7
@RequestMapping("/main")
Public class MainController {
 
    @RequestMapping("/test")
    Public String test () {}
 
}
cs


/main 을  MainController 에서 받아와 test()에서 /main의 뒷부분, /test 을 처리한다.

물론, 단독 매핑도 가능하다.


1
2
3
4
5
6
7
@Controller
Public class MainController {
 
    @RequestMapping("/main/test")
    Public String test () {}
 
}
cs


클래스 레벨의 URL 패턴이 와일드카드(*)로 끝날 경우 메서드명이 사용되게 할 수도 있다.


1
2
3
4
5
6
7
8
9
10
11
@RequestMapping("/main/*")
Public class MainController {
    @RequestMapping
    Public String test () {}
    
    @RequestMapping
    Public String login () {}
    
    @RequestMapping
    Public String logout () {}
}
cs


위 코드에서는 아래와 같이 요청을 받아 처리한다.


 요청 URI

 처리 메서드

 /main/test

 test()

 /main/login

 login()

 /main/logout

 logout()


응용을 해본다면 이런 식으로 가능할 것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RequestMapping("/user/*")
Public class UserController {
    @RequestMapping
    Public String create (HttpServletRequest req, String id, String pw, String name) {}
    
    @RequestMapping
    Public String read (HttpServletRequest req) {}
    
    @RequestMapping
    Public String update (HttpServletRequest req, String id, String name) {}
    
    @RequestMapping
    Public String delete (HttpServletRequest req, String id) {}
}
Colored by Color Scripter
cs


user에 관련한 CRUD를 총괄하는 컨트롤러다.

만약, 새 user를 추가하게 된다면, GET 방식 기준으로 "/user/create?id=userid&pw=password&name=홍길동" 요청을 보내서 create 메서드가 데이터를 입력하는 로직을 태우고,

모든 user를 조회하려면 "/user/read" 요청을 보내 read 메서드에서 모든 정보를 조회해 응답하면된다.

업데이트와 삭제도 동일한 방식이다.


반응형
저작자표시 비영리 변경금지 (새창열림)

'🌱 SPRING' 카테고리의 다른 글

[SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker  (0) 2021.05.16
[SpringBoot] 컨트롤러, View(JSP) 작성하기  (0) 2020.05.30
[SpringBoot] 스프링 부트 프로젝트 생성  (1) 2020.05.30
의존관계 주입(DI, Dependency Injection)  (1) 2017.11.30
로그인 체크 필터  (0) 2017.09.05
    '🌱 SPRING' 카테고리의 다른 글
    • [SpringBoot] 컨트롤러, View(JSP) 작성하기
    • [SpringBoot] 스프링 부트 프로젝트 생성
    • 의존관계 주입(DI, Dependency Injection)
    • 로그인 체크 필터
    1HOON
    1HOON

    티스토리툴바