본문 바로가기

스프링/스프링 MVC

Spring MVC @PathVariable, @MatrixVariable, @RequestParam

요청을 매핑할 수 있는 @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>를 통해 모든 요청 파라미터를 받아올 수 있다.

참고 자료