본문 바로가기

백엔드/스프링

스프링MVC 요청 매핑

요청 매핑 기본

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 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com