반응형

요청 매핑


MappingController


매핑 정보(한번 더)

  • @RestController
    • @Controller는 반환 값이 String이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다.
    • @RestController는 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다.
      따라서 실행 결과로 ok 메시지를 받을 수 있다. @ResponseBody와 관련이 있는데, 뒤에서 더 자세히 설명한다.
  • @RequestMapping("/hello-basic")
    • /hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다.
    • 대부분의 속성을 배열[]로 제공하므로 다중 설정이 가능하다. {"/hello-basic", "/hello-go"}

 

Postman으로 테스트 해보자.


둘다 허용
다음 두가지 요청은 다른 URL이지만, 스프링은 다음 URL 요청들을 같은 요청으로 매핑한다.

  • 매핑: /hello-basic
  • URL 요청: /hello-basic, /hello-basic/

 

HTTP 메서드
@RequestMappingmethod 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다.
모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE

 


 

HTTP 메서드 매핑

만약 여기에 POST 요청을 하면 스프링 MVC는 HTTP 405 상태코드(Method Not Allowed)를 반환한다.

 


 

HTTP 메서드 매핑 축약

HTTP 메서드를 축약한 애노테이션을 사용하는 것이 더 직관적이다. 코드를 보면 내부에서 @RequestMappingmethod를 지정해서 사용하는 것을 확인할 수 있다.

 


 

PathVariable(경로 변수) 사용

실행

  • http://localhost:8080/mapping/userA

최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호한다.
(?userId=userA 이거는 쿼리파라미터 방식이고, 위와같이 리소스 경로에 식별자를 넣는 스타일은 PathVariable 방식)

  • /mapping/userA
  • /users/1

 

  • @RequestMapping은 URL 경로를 템플릿화({}) 할 수 있는데, @PathVariable을 사용하면 매칭되는 부분을 편리하게 조회할 수 있다.
  • @PathVariable의 이름과 파라미터 이름이 같으면 생략할 수 있다. (@PathVariable자체가 아니라 값만)

 


 

PathVariable 사용 - 다중

실행

  • http://localhost:8080/mapping/users/userA/orders/100

 


 

특정 파라미터 조건 매핑

실행

  • http://localhost:8080/mapping-param?mode=debug

 

특정 파라미터가 있거나 없는 조건을 추가할 수 있다. 잘 사용하지는 않는다.

 


 

특정 헤더 조건 매핑

파라미터 매핑과 비슷하지만, HTTP 헤더를 사용한다.
Postman으로 테스트 해야 한다.

이렇게 header에 mode=debug로 작성한 뒤, 요청을 보내야 ok응답을 받을 수 있다.

 


 

미디어 타입 조건 매핑 - HTTP 요청 Contetnt-Type, consume

Postman으로 테스트 해야 한다.

HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑한다.(서버가 소비하는 미디어 타입)
만약 맞지 않으면 HTTP 415 상태코드(Unsupported Media Type)을 반환한다.

 


 

미디어 타입 조건 매핑 - HTTP 요청 Accept, produce

HTTP 요청의 Accpet 헤더를 기반으로 미디어 타입으로 매핑한다.(클라이언트가 이해할 수 있는 미디어 타입)
만약 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다.

 

반응형