Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- spring
- 인프런
- Spring Boot
- SpringBoot
- db
- springdatajpa
- Servlet
- JDBC
- java
- 그리디
- 스프링 핵심 원리
- http
- QueryDSL
- 자바
- 알고리즘
- pointcut
- 스프링 핵심 기능
- Greedy
- 스프링
- jpa
- 김영한
- 백준
- Android
- JPQL
- Thymeleaf
- Exception
- Proxy
- AOP
- transaction
- kotlin
Archives
- Today
- Total
개발자되기 프로젝트
Request Mapping 본문
1. Request Mapping?
- 요청이 왔을 때 어떤 Controller가 mapping되어야함???
- 예시
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(MappingController.class);
/**
* url Mapping
*/
@RequestMapping("/hello-basic")
public String helloBasic(){
log.info("helloBasic");
return "ok";
}
}
2. @RestController
- @RestController의 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력
- @Controller의 반환 값이 String 이면 뷰 이름으로 인식. --> String으로 뷰 찾고 랜더링
3. @RequestMapping("hello-basic")
- /hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다.
- 대부분의 속성을 배열[] 로 제공하므로 다중 설정이 가능하다. {"/hello-basic", "/hello-go"}
4. "/" 허용
- "/hello-basic"과 "/hello-basic/"은 다른 URL이다.
- 하지만 Spring은 "/hello-basic"으로 매핑해준다.
5. HTTP 메서드
- @RequestMapping 에 method 속성으로 HTTP 메서드를 지정하지 않으면
- HTTP 메서드와 무관하게호출된다.
- GET, HEAD, POST, PUT, PATCH, DELETE 뭐로 보내도 메서드가 실행됨 ㅋㅋㅋㅋ
- @RequsetMapping(method= ) 지정을 하거나
- @GetMapping, @PostMapping 등 활용하면 축약 가능.
6. PathVariable 활용
- 변수 명이 같으면 생략 가능
- @PathVariable("userId") String userId --> @PathVariable String userId
/**
* PathVariable 사용
* 변수 명이 같으면 생략 가능
* @PathVariable("userId") String userId --> @PathVariable String userId
* /mapping/{userA}
*/
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userID") String data){
log.info("mappingPath userID = {}", data);
return "ok";
}
- 최근 HTTP API는 리소스 경로에 식별자를 넣는 스타일을 선호
- /mapping/userA
- /users/1
7. PathVariable - 다중
@GetMapping("/mapping/users/{userID}/orders/{orderId}")
public String mappingPath(@PathVariable("userId") String userID,
@PathVariable("orderID") String orderID){
log.info("mappingPath userID = {}, orderID = {}", userID, orderID);
return "ok";
}
8. 특정 Query Parameter 조건 매핑
- 특정 쿼리 파라미터가 전달되었을 때 메서드가 실행되도록 할 수 있음.
- 아래 메서드는 Query Paramter로 mode에 "debug"가 전달되었을 경우에 실행.
- 요청 url : http://localhost:8080/mapping-param?mode=debug
/**
* 파라미터로 추가 매핑
* 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";
}
9. 특정 헤더 조건 매핑
- 헤더에 특정 조건이 들어가 있을 경우에만 실행
/**
* 특정 헤더로 추가 매핑
* 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";
}
- 헤더에 별다른 조건을 넣지 않으면 에러
- 헤더에 mode = debug를 넣어주면?
10. 미디어 타입 조건 매핑 - HTTP 요청 ContentType, consumes
- SpringMVC를 쓰는 경우 ContentType에 따라 분리할 수 있음.
- 이 경우에 consume을 사용. Spring내부적으로 처리하는게 있음 ㅋㅋㅋ
- consumes="application.json"
- 아래 예시의 경우 contentType이 json인 경우 실행됨.
/**
* Content-Type 헤더 기반 추가 매핑 Media Type
* consumes="application/json"
* consumes="!application/json"
* consumes="application/*"
* consumes="*\/*"
* MediaType.APPLICATION_JSON_VALUE
*/
@PostMapping(value = "/mapping-consume", consumes = "application/json")
public String mappingConsumes() {
log.info("mappingConsumes");
return "ok";
}
11. 미디어 타입 조건 매핑 - HTTP 요청 Accept, produce
- Accept헤더 : 클라이언트가 선호하는 미디어 타입 전달
- 즉 아래의 경우 client가 선호하는 미디어 타입이 text/html일 경우 호출됨.
- produces 사용.
/**
* Accept 헤더 기반 Media Type
* produces = "text/html"
* produces = "!text/html"
* produces = "text/*"
* produces = "*\/*"
*/
@PostMapping(value = "/mapping-produce", produces = "text/html")
public String mappingProduces() {
log.info("mappingProduces");
return "ok";
}
- Accept를 아래와 같이 임의로 application/json으로 변경하면 406에러 ㅋㅋㅋ
- Accept를 text/html로 변경하면 ok
12. GitHub : 210913 RequestMapping210913 RequestMapping
'인프런 > [인프런] 스프링 MVC 1' 카테고리의 다른 글
HTTP 요청 - Header 조회 (0) | 2021.09.14 |
---|---|
RequestMapping - API (0) | 2021.09.14 |
Logging기능 (0) | 2021.09.13 |
프로젝트 생성 (0) | 2021.09.13 |
SpringMVC - 실용적인방식. (0) | 2021.09.12 |
Comments