@RestController 는

@Controller의 반환 값이 String이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 렌더링 된다.

@RestController는 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다. 따라서 실행 결과를 바로 페이지에 띄울 수 있다!

그리구 컨트롤러에 @RequestMapping으로 url로 요청을 매핑할 때 여러개의 url을 중복 등록 가능하다! OR 조건이다!

url 매핑시에 @RequestMapping은 모든 요청(GET, POST, PUT)을 받아들인다!! 그래서 꼭 나눠주기~~

아래 코드는 굉장히 많이 쓰는 @PathVariable 표현!! 쿼리스트링으로 url에서 값을 받아올때 저렇게 매개 변수 앞에 @PathVariable(”쿼리스트링 명”)을 붙히면, 동적으로 해당 값을 받아 올 수 있다!!!!!

@Slf4j
@RestController
public class mappingController {

    @GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable("userId") String data){
        log.info("mappingPath={}", data);
        return "ok";
    }
}

// 변수 명이 path의 이름과 같다?! 그럼 생략 가능..
@Slf4j
@RestController
public class mappingController {

    @GetMapping("/mapping/{userId}")
    public String mappingPath(@PathVariable String userId) {
        log.info("mappingPath={}", userId);
        return "ok";
    }
}

아래 코드와 같에 header = “mode=debug” 는 헤더에 mode(key) = debug(value) 라는 값이 있어야 url 매칭이 되서 해당 컨트롤러가 호출된다!! 주석처럼 다양한 조건도 추가 가능하다! headers가 아니라 params로 바꾸면 매개변수도 조건을 걸어 줄 수 있다 조건 종류는 주석과 비슷하다!

/**
     * 특정 헤더로 추가 매핑
     * 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도 json이나 다른것들로 제한 가능!! 저게 맞지 않으면 url 매핑조차도 되지 않음!! 형식 잘못되서 넘어올 수도 있으니 중요할듯?!

/**
* 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";
}

근데 저런 하드코딩보다 MediaType.Json~ html~ 다 존재하니 정해준 ENUM값을 쓰자!!

  /**
     * Accept 헤더 기반 Media Type
     * produces = "text/html"
     * produces = "!text/html"
     * produces = "text/*"
     * produces = "*\\/*"
     */
    @PostMapping(value = "/mapping-produce", produces = MediaType.APPLICATION_JSON_VALUE)
    public String mappingProduces() {
        log.info("mappingProduces");
        return "ok";
    }