요청을 매핑할 수 있는 @PathVariable, @MatrixVariable, @RequestParam에 대해 알아본다.
@PathVariable
- 요청 URI 패턴의 일부를 핸들러 메서드 파라미터로 받을 수 있다.
- @GetMapping에서 {id} 부분을 메서드의 파라미터에 매핑시켜준다.
- 해당 파라미터에 @PathVariable을 붙이면 된다.
- 만약 /hello/23이라는 요청이 들어오면 id에 23이 매핑될 것이다.
- 원래라면 @PathVariable에 url {id}와 같이 명시된 name을 위와 같이 적어 주어야 한다.
- 하나 타입 변환을 지원해주므로 주황색 박스의 변수명이 같으면 빨간색 줄을 생략할 수 있다.
테스트
- /hello/1로 요청을 보냈을 때 id에 1이 들어간 것을 알 수 있다.
- 만약 /hello와 같이 값을 넣지 않으면 BadRequest 응답이 발생한다.
- @PathVariable(reque = false)로 설정하거나, 파라미터를 Optional로 설정하면 BadRequest가 발생하지 않는다.
@MatrixVariable
- 요청 URI 패턴에서 키/값 쌍의 데이터를 메서드 파라미터로 받는 방법
- 이렇게 요청 url끝에 name=james로 보내면 String name = james가 된다.
- @PathVariable과 마찬가지로 타입 변환을 지원해주므로 따로 값을 명시하지 않아도 된다.
- 그리고 데이터가 없다면 BadRequest가 발생할 것이며 @PathVariable과 똑같은 설정을 통해 해결이 가능하다.
참고
- 위의 Test 코드를 보면 세미콜론으로 url이 구문 된 것을 알 수 있다.
- 스프링에서는 기본으로 urlPath에 세미콜론은 제거하기 때문이 이렇게 따로 추가 설정이 필요하다.
@RequestParam
- 요청에 들어있는 단순 타입 데이터를 메서드 파라미터로 받아올 수 있다.
- @RequestParam을 이용하면 단순 타입들을 받아올 수 있다.
- @RequestParam을 생략하여도 알아서 매핑을 해주긴 하지만 명시적으로 적는 게 좋다.
- 메서드 파라미터 변수명이 Request Param의 name 속성과 일치하면 매칭을 해준다.
Test
- 위와 같이 param 설정을 통해 파라미터로 전달이 가능하다.
- 테스트 결과를 보면 name에 james가 들어간 것을 알 수 있다.
- 만약 @RequestParam이 있는데 값이 없다면 BadRequest가 발생한다.
- 아래와 같이 required와 defalutValue를 설정할 수도 있고 Optional로 받아올 수도 있다.
- Map<String, String> 또는 MultiValueMap<String, String>를 통해 모든 요청 파라미터를 받아올 수 있다.
'스프링 > 스프링 MVC' 카테고리의 다른 글
핸들러 메서드: @SessionAttributes, @SessionAttribute (0) | 2019.12.25 |
---|---|
Spring MVC @ModelAttribute, @Valid, @Validated (0) | 2019.12.24 |
Spring MVC HEAD, OPTIONS HTTP Method (0) | 2019.12.22 |
Spring MVC 미디어타입, 헤더, 매개변수 매핑 (0) | 2019.12.22 |
Spring MVC HTTP Method(@RequestMapping), URL 패턴 (0) | 2019.12.22 |