개발놀이터

스프링 요청매핑 본문

Spring/Spring

스프링 요청매핑

마늘냄새폴폴 2021. 8. 19. 08:24

*요청 매핑

*@RestController
-@Controller는 반환 값이 String 이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다.
-@RestController는 반환 값으로 뷰를 찾는 것이 아니라 HTTP메시지 바디에 바로 입력한다. @ResponseBody와 관련이 있는데 뒤에서 더 자세히 설명한다.

*@RequestMapping("/hello-basic")
-/hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다.
-대부분 속성을 배열로 제공하므로 다중 설정이 가능하다. {"/hello-basic", "/hello-go"}

RequestMapping은 뒤에 method를 한정지을 수 있는데 다음과 같이 적으면 된다.
@RequestMapping(value = "/hello-basic", method = RequsetMethod.GET) 이렇게 적으면 GET방식만 허용되고 나머지는 차단된다.


*경로 변수
@GetMapping("/mapping/{userId}") 이런식으로 URL 자체에 템플릿처럼 값이 들어오는 것 
public String mappingPath(@PathVariable("userId") String data) {
log.info("mappingPath userId = {}", data);  //이런 식으로 꺼내서 쓸 수도 있음
return "ok";
}

@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable String userId) { //이런식으로 URL에 들어있는 경로변수명을 선언해주면 퉁칠 수 있다.

최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호한다.

PathVariable은 다중 사용이 가능하다.
@GetMapping("/mapping/users/{userId}/orders/{orderId}") 이런식으로 다중으로 사용 가능


*특정 헤더 조건 매핑
@GetMapping(value = "/mapping-header", headers = "mode=debug") 이런식으로 특정 헤더를 조건으로 하는 매핑을 추가할 수 있다.

특정 헤더를 추가해줘야만 접근이 가능하다.


*미디어 타입 조건 매핑 - HTTP 요청 Content-Type, consume
@PostMapping(value = "/mapping-consume", consumes = "application/json") 이렇게 매핑하게 되면 application/json인 타입만 접근이 가능하다
@PostMapping(value = "/mapping-consume", consumes = MediaType.APPLICATION_JSON_VALUE) 이렇게 적는게 더 좋다. (가독성)


*미디어 타입 조건 매핑 - HTTP 요청 Accept, produce
@PostMapping(value = "/mapping-produce", produces = "text/html") 
@PostMapping(value = "/mapping-produce", produces = MediaType.TEXT_HTML_VALUE) 이렇게 적는게 더 좋다. (가독성)
이렇게 매핑하게 되면 내가 생산하는 타입이 text/html이기 때문에 Accept가 text/html인 파일만 접근이 가능하다. HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑한다. 만약 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다.

'Spring > Spring' 카테고리의 다른 글

스프링 HTTP 요청 메시지 - 단순 텍스트  (0) 2021.08.19
스프링 요청파라미터  (0) 2021.08.19
스프링 로깅  (0) 2021.08.19
스프링 MVC 구조  (0) 2021.08.19
스프링 빈 스코프  (0) 2021.08.16