김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C
요청 매핑
MappingController
매핑 정보
@RestController
• @Controller 는 반환 값이 String이면 뷰 이름으로 인식됩니다. 그래서 뷰를 찾고 뷰가 랜더링 됩니다.
• @RestController 는 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다. 따라서 실행 결과로 ok 메세지를 받을 수 있습니다. @ResponseBody 와 관련이 있는데, 뒤에서 더 자세히 설명합니다.
@RequestMapping("/hello-basic")
• /hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑합니다.
• 대부분의 속성을 배열[] 로 제공하므로 다중 설정이 가능합니다. {"/hello-basic", "/hello-go"}
둘다 허용
다음 두가지 요청은 다른 URL이지만, 스프링은 다음 URL 요청들을 같은 요청으로 매핑합니다.
• 매핑: /hello-basic
• URL 요청: /hello-basic , /hello-basic/ --> 이둘은 엄연히 다르지만 스프링이 같은 것으로 보고 처리해줍니다.
HTTP 메서드
@RequestMapping 에 method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출됩니다.
모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE
MappingController의 helloBasic에 매핑된 url 요청을 하면 화면에 "ok"가 출력됩니다.
method = RequestMapping.GET이 없다면 POST, PUT, DELETE로 보내도 ok지만 위에 작성한 것처럼
method = RequestMapping.GET를 넣어주면 GET외의 메소드로 보낼 경우 아래와 같은 에러를 json에 담아서 줍니다.
@RequestMapping을 아래와 같이 @GetMapping으로 바꾸는 것이 더 직관적이고 좋습니다.
PathVariable(경로 변수) 사용
PathVariable로 다중 값도 처리 가능합니다.
특정 파라미터 조건 매핑
잘 사용하진 않지만 특정 파라미터가 있어야만 실행되게 할 수 있습니다.
즉 요청이 http://localhost:8080/mapping-param?mode=debug 으로 들어와야만 합니다.
만약 http://localhost:8080/mapping-param 이렇게 요청이 오면 404에러를 띄웁니다
특정 헤더 조건 매핑
headers = "mode=debug"에 써있는 것처럼
header에 위의 값을 넣지 않으면 에러를 띄웁니다.
요렇게 header에 값을 넣어야 ok응답을 받을 수 있습니다.
미디어 타입 조건 매핑 - HTTP 요청 Content-Type, Consume
Post메서드로 날아오고, body의 데이터는 json이어야 합니다.
미디어 타입 조건 매핑 - HTTP 요청 Accept, produce
Accept는 "나는 요 타입으로만 응답 받을거야!"라고 클라이언트에서 보내는 정보입니다.
Produce는 해당 매핑에 대한 "응답은 이런 타입으로 보낼꺼야!" 라고 서버의 입장에서 말하는 것입니다.
위의 코드를 보면 (value = "/mapping-prodece", produces = "text/html") 이라고 되어있습니다.
즉 해당 매핑에 대한 응답으로 text/html을 보낼 것이라는 것입니다.
근데 /mapping-prodece으로 날라온 요청의 Accept가 application/json이라면???
요청은 json을 원하는데, 응답은 text/html이라면 이는 서로 요청과 응답을 주고 받을 수 없으니 서버는 에러를 발생시킵니다.
406에러가 난다!
하지만 Accept을 "text/html"으로 보내면 당연히 응답을 받을 수 있습니다.
'Spring > spring mvc' 카테고리의 다른 글
HTTP 요청 헤더 정보 조회 (0) | 2021.06.28 |
---|---|
요청 매핑 API만들기 (0) | 2021.06.28 |
23 로깅 (0) | 2021.06.27 |
스프링 MVC실용적 방식 (modelview를 스프링에게 맡기기) (0) | 2021.06.27 |
스프링 MVC 시작하기 (0) | 2021.06.27 |