Loading...
Spring Framework Reference Documentation 7.0.2의 Matrix Variables의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
See equivalent in the Reactive stack
RFC 3986는 path segment에서의 name-value pair에 대해 설명합니다. Spring MVC에서는 Tim Berners-Lee의 “old post”에 근거하여 이를 “matrix variables”라고 부르지만, URI path parameters라고도 부를 수 있습니다.
Matrix variables는 어떤 path segment에도 나타날 수 있으며, 각 variable은 세미콜론으로 구분되고, 여러 값은 콤마로 구분됩니다 (예: /cars;color=red,green;year=2012). 여러 값은 반복된 variable 이름으로도 지정할 수 있습니다 (예: color=red;color=green;color=blue).
URL에 matrix variables가 포함될 것으로 예상되는 경우, controller method에 대한 request mapping은 URI variable을 사용하여 해당 variable content를 mask해야 하며, matrix variable의 순서와 존재 여부에 관계없이 request가 성공적으로 매치될 수 있도록 해야 합니다.
다음 예제는 matrix 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// GET /owners/42;q=11/pets/21;q=22 2 3@GetMapping("/owners/{ownerId}/pets/{petId}") 4fun findPet( 5 @MatrixVariable(name = "q", pathVar = "ownerId") q1: Int, 6 @MatrixVariable(name = "q", pathVar = "petId") q2: Int) { 7 8 // q1 == 11 9 // q2 == 22 10}
Matrix variable은 optional로 정의될 수 있으며, 다음 예제와 같이 default value를 지정할 수 있습니다:
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}
Matrix variables의 사용을 활성화해야 한다는 점에 유의하십시오. MVC XML namespace에서는 <mvc:annotation-driven enable-matrix-variables="true"/>를 설정할 수 있습니다.
Type Conversion
@RequestParam