매핑 정보
@Controller의 반환값이 String일때 = 뷰이름으로 인식해서 뷰를 찾고 뷰가 렌더링 된다.
@RestController의 반환 값은 뷰를 찾는 것이 아닌 HTTP 메시지 바디에 입력
@RequestMapping을 url지정할 때 배열로 제공해주기 때문에 여러가지 url을 사용 가능하다.
ex) @RequestMapping({"/hello","/hi","/bonjour"})
스프링 부트 3.0 이전에는 localhost:8080/hello와 localhost:8080/hello/를 같은 매핑 정보로 인식했지만
스프링 부트 3.0 이후에는 localhost:8080/hello와 localhost:8080/hello/를 다른 매핑 정보로 인식한다.
@RequestMapping의 Method를 지정하지 않으면 무슨 방식으로 요청을 하든 반응한다.
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
경로 변수
@GetMapping("/mapping/{userId}")
// @PathVariable("userId") String userId -> @PathVariable String userId
public String mappingPath(@PathVariable("userId") String data) {
URL 경로를 템플릿화
ex) 마이페이지 -> 로그인한 아이디마다 다른 정보
쿼리 파라미터 방식 url?userId=data
경로 변수 방식 url/data
경로변수 다중 사용
@GetMapping("/mapping/users/{userId}/orders/{orderId}")
public String mappingPath(@PathVariable String userId, @PathVariable LongorderId) {
쿼리 파라미터 조건 매핑
/**
* 파라미터로 추가 매핑
* params="mode",
* params="!mode"
* params="mode=debug"
* params="mode!=debug" (! = )
* params = {"mode=debug","data=good"}
*/
@GetMapping(value = "/mapping-param", params = "mode=debug")
public String mappingParam() {
log.info("mappingParam");
return "ok";
}
특정 파라미터가 있어야 해당url 호출가능 (잘 사용하지 않음)
특정 헤더 조건 매핑
/**
* 특정 헤더로 추가 매핑
* headers="mode",
* headers="!mode"
* headers="mode=debug"
* headers="mode!=debug" (! = )
*/
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
log.info("mappingHeader");
return "ok";
}
특정 헤더가 있어야 해당url 호출가능 (잘 사용하지 않음)
특정 미디어 타입 조건 매핑
/**
* Content-Type 헤더 기반 추가 매핑 Media Type
* consumes="application/json"
* consumes="!application/json"
* consumes="application/*"
* consumes="*\/*"
* MediaType.APPLICATION_JSON_VALUE
* ↓ 예시)
* consumes = "text/plain"
* consumes = {"text/plain", "application/*"}
* consumes = MediaType.TEXT_PLAIN_VALUE
*/ //주의!!! content-type이 아닌 consumes
@PostMapping(value = "/mapping-consume", consumes = "application/json")
public String mappingConsumes() { //MediaType.APPLICATION_JSON_VALUE로 사용하면 좋음
log.info("mappingConsumes");
return "ok";
}
HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑한다. 만약 맞지 않으면 HTTP 415 상태코드(Unsupported Media Type)을 반환한다.
consumes 이란?
produce에 consumes가 존재한다. 서버(컨트롤러) 입장에서보면 content-type을 소비해서 사용하는 입장이기 때문에 comsumes이라 한다.
특정 미디어 타입 조건 매핑
/**
* Accept 헤더 기반 Media Type
* produces = "text/html"
* produces = "!text/html"
* produces = "text/*"
* produces = "*\/*"
* ↓ 예시)
* produces = "text/plain"
* produces = {"text/plain", "application/*"}
* produces = MediaType.TEXT_PLAIN_VALUE
* produces = "text/plain;charset=UTF-8"
*/
@PostMapping(value = "/mapping-produce", produces = "text/html")
public String mappingProduces() { //MediaType.TEXT_HTML_VALUE
log.info("mappingProduces");
return "ok";
}
HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑한다. 만약 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다.
API 예시
- 회원 목록 조회: GET /users
- 회원 등록: POST /users
- 회원 조회: GET /users/{userId}
- 회원 수정: PATCH /users/{userId}
- 회원 삭제: DELETE /users/{userId}
'Spring' 카테고리의 다른 글
[Spring] Spring MVC - HTTP 응답 (0) | 2024.05.07 |
---|---|
[Spring] Spring MVC - HTTP 요청 파라미터 처리 (1) | 2024.05.07 |
[Spring] 로깅(logging) 기본 (0) | 2024.05.07 |
[Spring] Spring MVC 기본 개념 (1) | 2024.05.06 |
[Spring&Java] 프론트 컨트롤러 (0) | 2024.05.06 |