다양한 요청 매핑
테스트 환경
1. 로그 출력은 시스템 콘솔 대신 slf4j 로깅 라이브러리 사용
2. view 템플릿 없이 매핑 결과만 테스트하기 위해 RestController사용하여 return값 그대로 화면에 출력
3. 모든 테스트는 Postman 플랫폼으로 테스트
기본 어노테이션 매핑
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
/**
* 기본 요청
* 둘다 허용 /hello-basic, /hello-basic/
* HTTP 메서드 모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE
*/
@RequestMapping(value = "/hello-basic")
public String helloBasic(){
log.info("helloBasic");
return "ok";
}
/**
* method 특정 HTTP 메서드 요청만 허용
* GET, HEAD, POST, PUT, PATCH, DELETE
*/
@RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET)
public String mappingGetV1(){
log.info("helloBasic");
return "ok";
}
}
축약 어노테이션 매핑
@RestController
@RequestMapping("/mapping/users") // 중복 경로는 class레벨에서 RequestMapping으로 처리
public class MappingClassController {
/**
* 축약 어노테이션
* @GetMapping
* @PostMapping
* @PutMapping
* @DeleteMapping
* @PatchMapping
*/
@GetMapping
public String user(){
return "get users";
}
@PostMapping
public String addUser(){
return "post user";
}
@GetMapping("/{userId}")
public String findUser(@PathVariable String userId){
return "get userId = " + userId;
}
@PatchMapping("/{userId}")
public String addUser(@PathVariable String userId){
return "update userId = " + userId;
}
@DeleteMapping("/{userId}")
public String deleteUser(@PathVariable String userId){
return "delete userId = " + userId;
}
}
축약 어노테이션 + 경로 변수 매핑
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
/**
* PathVariable 사용
* 변수명이 같으면 생략 가능
* @PathVariable("userId") String userId -> @PathVariable userId
*
*/
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data) {
log.info("mappingPath userId={}", data);
return "ok";
}
/**
* PathVariable 사용 다중
*/
@GetMapping("/mapping/users/{userId}/orders/{orderId}")
public String mappingPath(@PathVariable String userId, @PathVariable Long
orderId) {
log.info("mappingPath userId={}, orderId={}", userId, orderId);
return "ok";
}
}
축약 어노테이션 + 특정 파라미터 조건 매핑
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
/**
* 파라미터로 추가 매핑
* 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";
}
}
축약 어노테이션 + 특정 헤더 조건 매핑
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
/**
* 특정 헤더로 추가 매핑
* 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";
}
}
축약 어노테이션 + 미디어 타입 조건 매핑 (Content-Type, consume)
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
/**
* 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";
}
}
축약 어노테이션 + 미디어 타입 조건 매핑 (Accept, produce)
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
/**
* 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";
}
}
Reference
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/
'Spring' 카테고리의 다른 글
[Spring] 유효성 검사(Validating Form) (0) | 2021.08.18 |
---|---|
[Spring] HTTP 메시지 컨버터 (HttpMessageConverter) (0) | 2021.08.02 |
[Spring] 동시요청 - 쓰레드와 멀티 쓰레드(multi thread) (0) | 2021.07.22 |
[Spring] 웹 서버 vs 웹 어플리케이션 서버 (0) | 2021.07.22 |
[Spring] 빈 생명주기(Lifecycle) 콜백 - 3가지 방법 (0) | 2021.07.06 |