요청 매핑 기본
Controller : 반환값이 String 이면 뷰 이름으로 인식됨
RestController : 반환값으로 뷰를 찾지 않고 Http 메시지 바디에 바로 입력한다.
@RequestMapping({"/hi", "/hello"})
public String myController() {}
RequestMapping은 배열을 통해 여러 url 처리가 가능하게 설정할 수도 있다.
http 메서드 지정은 @GetMapping 등으로 쉽게 할 수 있다.
Path Variable
Path Variable은 리소스에 식별자를 넣는 경우, 경로를 변수로 받아올 때 사용한다.
@GetMapping("/path-variable/{user}")
public String path(@PathVariable("user") String data) {
return data;
}
사용 예시는 위와 같다. 변수명이 같다면 생략할 수도 있다.
@GetMapping("/path-variable/{user}")
public String path(@PathVariable String user) {
return data;
}
Content-Type에 따른 요청구분
스프링MVC에서는 Content-Type에 따라서도 요청을 구분할 수가 있다. 종류는 produces와 consumes 두가지이다.
@PostMapping(value="/mapping-consume", consumes="application/json")
public String mappingConsumes() {
log.info("mapping Consume");
return "ok";
}
consumes 옵션을 줘서 json 타입만 받도록했다.
요청을 Json이 아닌 Xml형식으로 보내면 이렇게 지원하지 않는 미디어 타입이라는 에러코드가 나온다.
Json으로 보내면 응답 상태코드가 200으로 정상 처리된 것을 확인할 수 있다.
@PostMapping(value="/mapping-prod", produces="application/json")
public String mappingProduces() {
return "ok";
}
produces는 컨트롤러가 자신의 응답 형식이 이런것이다 라는것을 명시해주는 것이다. 만약 http 요청 메시지의 Accept에 해당 형식이 없다면 에러가 반환된다.
요청 헤더에 Accept를 text/html만 넣어서 보냈더니 응답 결과는 406이다.
이렇게 produces와 consumes를 사용하면 Content-Type에 따라서 컨트롤러가 지원가능한 요청인지를 판단할 수 있게된다. 추가로 위의 방식처럼하면 오타가 날 가능성이 있으니 사전에 정의된 MediaType을 이용하도록 한다.
@PostMapping(value="/mapping-prod", produces= MediaType.APPLICATION_JSON_VALUE)
public String mappingProduces() {
return "ok";
}
관련글
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'백엔드 > 스프링' 카테고리의 다른 글
스프링 MVC - 응답데이터와 메시지 컨버터 (0) | 2021.08.19 |
---|---|
스프링 MVC - 요청 데이터 (0) | 2021.08.19 |
스프링MVC의 Handler, View Resolver (0) | 2021.08.18 |
프론트 컨트롤러 패턴 (0) | 2021.08.17 |
Http Request 데이터 형식 정리 (0) | 2021.08.17 |