@RequestMapping의 정의

Spring에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 핸들러 매핑과 어댑터

사용 예시

@Controller
public class Controller {
	@RequestMapping("/hello/form", method = RequestMethod.GET)
    public String helloForm() {
        return "hello-form";
    }
}

코드 설명

localhost:8080/hello로 접속하면 ModelAndView를 통해 hello-form.jsp를 렌더링 합니다.

장점

@RequestMapping은 메서드 단위에서 적용되기 때문에 하나의 컨트롤러에서 여러 경로를 매핑할 수 있습니다.

간편한 축약 Annotation 사용

@GetMapping 또는 @PostMapping 등으로 Get 또는 Post 방식 등의 @RequestMapping을 간편하게 정의할 수 있음

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

중복되는 상위 경로 관리

하나의 컨트롤러 클래스에서 중복되는 상위 경로는 아래와 같이 통일할 수 있음

@Controller
@RequestMapping("/hello")
public class Controller {
 
	@GetMapping("/form")
    public String helloForm() {
        return "hello-form";
    }
 
	@GetMapping("/save")
	public String helloSave() {
        return "hello-save";
    }
}

매핑 조건 걸기

1. 특정 헤더 조건 매핑 (headers 옵션)

특정 헤더를 기준으로 조건을 추가하여 현재 요청 URL에서 요청을 할지 말지 결정합니다.

  • headers=“mode”, (mode라는 header가 있을 때)
  • headers=“!mode” (mode라는 header가 없을 때)
  • headers=“mode=debug” (mode라는 header의 값이 debug일 때)
  • headers=“mode!=debug” (mode라는 header의 값이 debug가 아닐 때)
// 3번째 경우 예시
 
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
    log.info("mappingHeader");
	return "ok";
}

2. Content-Type 미디어 타입 조건 매핑 (consumes 옵션)

application/json 타입으로 요청 데이터를 가진 채로 해당 경로에 요청해야지만 매핑이 되도록 조건을 줍니다.

@PostMapping(value = "/mapping-consume", consumes = "application/json")
public String mappingConsumes() {
    log.info("mappingConsumes");
    return "ok";
}

3. Accept 미디어 타입 조건 매핑 (produces 옵션)

요청한 사용자가 text/html 타입의 응답 타입을 받아들일 수 있다고 해야지만 매핑이 되도록 조건을 줍니다.

@PostMapping(value = "/mapping-produce", produces = "text/html")
public String mappingProduces() {
     log.info("mappingProduces");
     return "ok";
}