스프링/3. 스프링 MVC

39. 요청매핑

sdafdq 2023. 8. 11. 23:31

요청매핑은 말 그대로 요청 왔을 때 어떤 컨트롤러와 매칭해야 하는 지

 

 

@Slf4j
@RestController
public class MappingController {

    @RequestMapping(value = {"/hello-basic", "hello-go"}, method = RequestMethod.GET)
    public String helloBasic(HttpServletRequest request){
        log.info("basic");
        return request.getRequestURI();
    }
}

저렇게 uri경로 두개로 받을 수 있다.

 

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

이렇게 경로로 들어온 걸 값으로 활용할 수 있다.

http://localhost:8080/mapping/userA

userA가 들어온다. 말 그대로 경로변수.

 

 

 

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

이렇게 변수명이랑 key이름을 똑같이 쓰면 이렇게 사용도 가능함.

 

 

 

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

여러개도 사용가능. 요샌 이렇게 많이 씀. 

 

 

 

    @GetMapping(value = "/mapping-param",params = "hi=hello")
    public String mappingParam(){
        log.info("mappingParam");
        return "ok";
    }

파라미터 중 "hi=hello"라는 파라미터가 있어야 함.

http://localhost:8080/mapping-param?hi=hello

 

    @GetMapping(value = "/mapping-param",params = "hi")
    public String mappingParam(){
        log.info("mappingParam");
        return "ok";
    }

이렇게 하면 파라미터 값은 상관없이 hi라는 파라미터가 존재하면 됨.

 

params="key"

params="!key" key가없어야 함

params="key=value" key가 value여야 함

params="key!=value"

params= {"key1=value","key2=value"} 여러개 배열로, 둘다 있어야 함.

 

 

    @GetMapping(value = "/mapping-header", headers= "key=value")
    public String mappingHeader(){
        log.info("mappingParam");
        return "ok";
    }

이렇게 헤더로도 검사 가능.

헤더에 저게 있어야 함.

 

 

 

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

consumes로 content-type도 검사해 받을 수 있다.

저걸로 타입마다 따로 받는것도 가능하다.

 

content-type은 헤더에 있지만, consumes로 써야 하는 이유는 저걸 써야 스프링이 내부적으로 처리하는 무언가가 있다.

 

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

요청헤더에 Accept라는게 있다. 이건 내가 어떤 타입을 허락한다는 뜻이다. 보통 */*로 되어 있다.

저 produces는 내가 응답에 생성할 타입이라는 거다.

 

근데 만약 요청에 Accept헤더를 무언가로 바꿔서 http://localhost:8080/mapping-produce 에다 보내면 만약 text/html이 아니라면 406(Not Accepted)를 받는다.

 

 

 

    @PostMapping(value = "/mapping-produce", produces = MediaType.TEXT_HTML_VALUE)
    public String mappingProduce(){
        log.info("mappingProduce");
        return "ok";
    }

 

'스프링 > 3. 스프링 MVC' 카테고리의 다른 글

41. 요청 파라미터 종류  (0) 2023.08.12
40. 요청 종류에 따른 api 구현  (0) 2023.08.12
38. 로그  (0) 2023.08.11
37. 스프링MVC 시작  (0) 2023.08.11
36. 실용적인 형식  (0) 2023.08.11