@RequestMapping은 위와 같이 다중 값 설정이 가능하다.
/hello-basic과 /hello-basic/은 다른 URL이지만, 스프링은 이를 같은 요청으로 매핑한다.
또한 앞서 공부했듯이 method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 모두 호출된다.
이는 method 속성에서 HTTP 메서드를 지정해주는 방식으로 해결할 수 있다.
더 편리하게 제공되는 GetMapping 애노테이션으로 더욱 직관적으로 나타낼 수 있음.
PathVariable(경로 변수)
위와 같이 변수를 사용하여 매핑시키고 들어온 변수를 PathVariable을 통해 꺼낼 수 있다.
최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호
- /mapping/userA
- /users/1
URL 경로를 템플릿화하고 PathVarialbe로 매칭 되는 부분을 조회하는 것이다.
@PathVariable의 이름과 파라미터 이름이 같으면 생략이 가능하다.
PathVariable 사용 - 다중 매핑
특정 파라미터 조건 매핑
parameter에 "mode=debug"가 있어야 매핑이 되도록 조건을 설정할 수 있다.
위와 같은 경로로 요청 정보를 보내면 매핑에 성공하지만
쿼리 파라미터를 제거하고 전송하면 오류가 발생한다. 조건에 해당되지 않기 때문에 매핑 X
URL 경로 뿐 아니라 파라미터 경로까지 추가로 조건을 설정한 것이다.
이 또한 배열로 다중 값 설정이 가능하다.
특정 헤더 조건 매핑
위와 같이 요청을 전송하면 오류가 발생 헤더에 해당 조건을 넣어야함
위와 같이 헤더정보에 조건에 해당하는 key-value값을 넣으면 정상적으로 요청정보가 매핑된다.
mode = debug 뿐 아니라 mode != debug 처럼 여러 조건을 넣을 수 있음.
미디어 타입 조건 매핑 - HTTP 요청 Content-Type
Consumes
consumes 속성을 사용하여 Content-Type에 따라 매핑시킬 수 있음.
서버가 소비하는 데이터 정보에 매핑 조건을 걸기 위해서는 consumes를 사용
json 타입만 매핑되도록 설정해두었기 때문에 위와같이 text형식으로 전송하면
415(Unsupported Media Type) 오류가 발생한다.
위와 같이 json형식으로 데이터를 전송하면 매핑이 정상적으로 되는 것을 확인할 수 있다.
consumes = "text/plain"
consumes = {"text/plain", "application/*"}
consumes = MediaType.TEXT_PLAIN_VALUE
- 이와 같이 다중 설정도 가능함
produces
클라이언트가 원하는 미디어 타입의 정보를 전달하는 것이 HTTP header의 accept인데
이를 produces 속성을 통해 매핑시킬 수 있다.
accept가 text/html인 것만 매핑하겠다는 조건이다.
위와같이 Accept 정보를 json형식으로 설정하고 요청을 전달하면 에러가 발생한다.
더보기
developer.mozilla.org/ko/docs/Web/HTTP/Headers/Accept
Accept란 클라이언트 입장에서 나는 어떠한 타입의 데이터만 받아들일 수 있다고 서버에 알려주는 정보이다.
즉 풀어서 설명해보면 클라이언트는 json형식의 데이터를 받아들이길 원하지만
서버 입장에서 생산해내는 정보는 text/html형식이기때문에 매핑이 되지 않는 것이다.
이와 같이 설정한 produces의 type과 Accept type이 일치하다면 매핑된다.
produces = "text/plain"
produces = {"text/plain", "application/*"}
produces = MediaType.TEXT_PLAIN_VALUE
produces = "text/plain;charset=UTF-8"
요청 매핑 - API 예시
회원 관리를 HTTP API로 만든다고 생각하고 매핑을 해보자(URL 매핑만)
회원 목록 조회 : GET > "/users"
회원 등록 : POST > "/users"
회원 조회 : GET > "/users/{userId}"
회원 수정 : PATCH > "/users/{userId}"
회원 삭제 : DELETE > "/users/{userId}"
같은 경로라도 HTTP 메서드에 따라서 다르게 매핑을 함.
1. 회원 목록 조회
2. 회원 등록
3. 회원 조회
4. 회원 수정
5. 회원 삭제
반응형
'Spring > Spring MVC' 카테고리의 다른 글
HTTP Request Parameter (0) | 2021.05.07 |
---|---|
HTTP 요청 - 헤더 정보 (0) | 2021.05.07 |
로깅 간단히 알아보기 (0) | 2021.05.03 |
Spring MVC (0) | 2021.05.01 |
ViewResolver (0) | 2021.05.01 |