Loading...
Spring Framework Reference Documentation 7.0.2의 Matrix Variables의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
RFC 3986은 path segment 내의 name-value pair에 대해 설명합니다. Spring WebFlux에서 우리는 Tim Berners-Lee의 “old post”를 바탕으로 그것들을 “matrix variables”라고 부르지만, URI path parameter라고도 부를 수 있습니다.
Matrix variables는 어떤 path segment에도 나타날 수 있으며, 각 variable은 세미콜론으로 구분되고 여러 값은 콤마로 구분됩니다. 예를 들어, "/cars;color=red,green;year=2012"와 같습니다. 여러 값은 반복된 variable 이름을 통해서도 지정할 수 있습니다. 예를 들어, "color=red;color=green;color=blue"와 같습니다.
Spring MVC와는 달리, WebFlux에서는 URL에 matrix variables가 존재하는지 여부가 request mapping에 영향을 미치지 않습니다. 다시 말해, variable 내용을 가리기 위해 URI variable을 사용할 필요가 없습니다. 그렇긴 하지만, controller method에서 matrix variables에 접근하려면 matrix variables가 예상되는 path segment에 URI variable을 추가해야 합니다. 다음 예시는 그 방법을 보여줍니다:
1// GET /pets/42;q=11;r=22 2 3@GetMapping("/pets/{petId}") 4public void findPet(@PathVariable String petId, @MatrixVariable int q) { 5 6 // petId == 42 7 // q == 11 8}
1// GET /pets/42;q=11;r=22 2 3@GetMapping("/pets/{petId}") 4fun findPet(@PathVariable petId: String, @MatrixVariable q: Int) { 5 6 // petId == 42 7 // q == 11 8}
모든 path segment가 matrix variables를 포함할 수 있으므로, 다음 예시에서 보듯이, 때때로 matrix variable이 어느 path variable 안에 있을 것으로 예상되는지를 명확히 해야 할 수도 있습니다:
1// GET /owners/42;q=11/pets/21;q=22 2 3@GetMapping("/owners/{ownerId}/pets/{petId}") 4public void findPet( 5 @MatrixVariable(name="q", pathVar="ownerId") int q1, 6 @MatrixVariable(name="q", pathVar="petId") int q2) { 7 8 // q1 == 11 9 // q2 == 22 10}
1@GetMapping("/owners/{ownerId}/pets/{petId}") 2fun findPet( 3 @MatrixVariable(name = "q", pathVar = "ownerId") q1: Int, 4 @MatrixVariable(name = "q", pathVar = "petId") q2: Int) { 5 6 // q1 == 11 7 // q2 == 22 8}
다음 예시에서 보듯이, matrix variable을 optional로 정의하고 기본값을 지정할 수 있습니다:
1// GET /pets/42 2 3@GetMapping("/pets/{petId}") 4public void findPet(@MatrixVariable(required=false, defaultValue="1") int q) { 5 6 // q == 1 7}
1// GET /pets/42 2 3@GetMapping("/pets/{petId}") 4fun findPet(@MatrixVariable(required = false, defaultValue = "1") q: Int) { 5 6 // q == 1 7}
모든 matrix variables를 가져오려면, 다음 예시에서 보듯이 MultiValueMap을 사용하십시오:
1// GET /owners/42;q=11;r=12/pets/21;q=22;s=23 2 3@GetMapping("/owners/{ownerId}/pets/{petId}") 4public void findPet( 5 @MatrixVariable MultiValueMap<String, String> matrixVars, 6 @MatrixVariable(pathVar="petId") MultiValueMap<String, String> petMatrixVars) { 7 8 // matrixVars: ["q" : [11,22], "r" : 12, "s" : 23] 9 // petMatrixVars: ["q" : 22, "s" : 23] 10}
1// GET /owners/42;q=11;r=12/pets/21;q=22;s=23 2 3@GetMapping("/owners/{ownerId}/pets/{petId}") 4fun findPet( 5 @MatrixVariable matrixVars: MultiValueMap<String, String>, 6 @MatrixVariable(pathVar="petId") petMatrixVars: MultiValueMap<String, String>) { 7 8 // matrixVars: ["q" : [11,22], "r" : 12, "s" : 23] 9 // petMatrixVars: ["q" : 22, "s" : 23] 10}
Type Conversion
@RequestParam