일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- beandefinitionstoreexception
- Spring
- springboot
- 알고리즘
- javascript
- 2018 KAKAO BLIND RECRUITMENT
- counting elements
- spring security
- HTTP
- codility
- 문자열
- BFS
- 소수
- Dijkstra
- Greedy
- applicationeventpublisher
- brute force
- 백준
- 코딩테스트
- algorithm
- 라이브템플릿
- API
- 파이썬
- java
- error
- 2981
- Python
- 최단경로
- 탐욕법
- 프로그래머스
Archives
- Today
- Total
Altiora Petamus
다양한 HTTP Mapping 1 본문
Intro
REST API 에 대해 학습하면서 정리하는 글입니다.
HTTP Request mapping
이하 모든 API 는 "ok" 라는 텍스트를 반환합니다.
기본 요청
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/hello-basic")
public String helloBasic() {
log.info("helloBasic");
return "ok";
}
}
- "/hello-basic" or "/hello-basic/" 모두 허용
- HTTP method 모두 허용 : GET, POST, PUT, PATCH, DELETE, HEAD
💡 log 는 @Slf4j 를 활용해도 가능합니다.
특정 메소드 요청만 허용 - V1
@RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET)
public String mappingGetV1() {
log.info("mappingGetV1");
return "ok";
}
여기에 POST 요청을 하면 405 Method Not Allowed 를 반환해줍니다.
HTTP method 축약 - V2
@GetMapping("/mapping-get-v2")
public String mappingGetV2() {
log.info("mappingGetV2");
return "ok";
}
더 직관적으로 사용할 수 있습니다. GET 뿐만 아니라 다른 HTTP method 에 대해서도 지원하고 있으니 자유롭게 사용하면 됩니다.
내부적으로 확인해보면 @GetMapping
또한 V1의 @RequestMapping
을 그대로 사용하고 있음을 알 수 있습니다.
PathVariable - V3
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data) {
log.info("mappingPath userId={}", data);
return "ok";
}
경로 변수의 사용입니다. 특정 url 뒤로 변하는 값이 올 때, 그 값을 받아서 사용해야한다면 @PathVariable
을 사용할 수 있습니다.
만약 @PathVariable
의 이름과 파라미터명이 같다면 이름을 생략 가능합니다.
- @PathVariable("userId") String userId ⇒ @PathVariable String user Id
PathVariable 다중 사용 - V4
@GetMapping("/mapping/users/{userId}/orders/{orderId}")
public String mappingPath(@PathVariable String userId, @PathVariable Long orderId) {
log.info("mappingPath userId={}, orderId={}", userId, orderId);
return "ok";
}
특정 파라미터 조건 매핑 - V5
@GetMapping(value = "/mapping-param", params = "mode=debug")
public String mappingParam() {
log.info("mappingParam");
return "ok";
}
정해진 파라미터가 들어왔을 때 매핑하는 방법입니다. 자주 사용되진 않지만 특수하게 필요한 경우 사용할 수 있을 것 같네요.
다양한 연산자를 함께 사용할 수 있습니다.
💡파라미터로 추가 매핑
params="mode"
params="!mode"
params="mode=debug"
params="mode!=debug"
params = {"mode=debug","data=good"}
이 방법은 이하 매핑 방법에 모두 적용 가능합니다.
특정 헤더로 매핑 - V6
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
log.info("mappingHeader");
return "ok";
}
이번엔 쿼리 파라미터가 아니라 특정 헤더 값에 매핑하는 방법입니다. 사용법은 V5 와 유사합니다.
미디어 타입 조건 매핑 - HTTP Content-Type, V7
@PostMapping(value = "/mapping-consume", consumes = MediaType.APPLICATION_JSON_VALUE)
public String mappingConsumes() {
log.info("mappingConsume");
return "ok";
}
HTTP header 중 Content-Type header 는 이 방법을 사용해야 합니다.
만약 맞지 않는다면 HTTP 415 Unsupported Media Type 를 반환합니다.
미디어 타입 조건 매핑 - HTTP Accept, V8
@PostMapping(value = "/mapping-produce", produces = MediaType.TEXT_HTML_VALUE)
public String mappingProduces() {
log.info("mappingProduces");
return "ok";
}
HTTP 요청의 Accept header 를 기반으로 매핑합니다.
만약 produces 로 작성한 헤더값과 맞지 않는다면 HTTP 406 Not Acceptable 을 반환합니다.
Reference
'Java > Spring Framework' 카테고리의 다른 글
@JsonNaming 사용 (springboot 2.5.3 ~) (0) | 2021.08.04 |
---|---|
다양한 HTTP Mapping 2 (0) | 2021.07.31 |
in-memory DB 구현 (0) | 2021.06.30 |
Spring Security 사용하기 1 (0) | 2021.06.26 |
Spring Security란? (0) | 2021.06.19 |