Matrix Variables

Dev.Hammy·2024년 4월 3일
0

반응형 스택에서 이에 상응하는 내용 보기

RFC 3986에서는 경로 세그먼트의 이름-값 쌍에 대해 설명합니다. Spring MVC에서는 Tim Berners-Lee의 "old post"을 기반으로 이를 "행렬 변수"라고 부르지만 URI 경로 매개변수라고도 할 수 있습니다.

매트릭스 변수는 모든 경로 세그먼트에 나타날 수 있으며 각 변수는 세미콜론으로 구분되고 여러 값은 쉼표로 구분됩니다(예: /cars;color=red,green;year=2012). 반복되는 변수 이름을 통해 여러 값을 지정할 수도 있습니다(예: color=red;color=green;color=blue).

URL에 행렬 변수가 포함될 것으로 예상되는 경우 컨트롤러 메서드에 대한 요청 매핑은 URI 변수를 사용하여 해당 변수 콘텐츠를 마스크하고 행렬 변수 순서 및 존재 여부와 관계없이 요청이 성공적으로 일치할 수 있는지 확인해야 합니다. 다음 예에서는 행렬 변수를 사용합니다.

// GET /pets/42;q=11;r=22

@GetMapping("/pets/{petId}")
public void findPet(@PathVariable String petId, @MatrixVariable int q) {

	// petId == 42
	// q == 11
}

모든 경로 세그먼트에 행렬 변수가 포함될 수 있다는 점을 고려하면 행렬 변수가 어떤 경로 변수에 포함될 것으로 예상되는지 명확하게 해야 하는 경우가 있습니다. 다음 예에서는 그렇게 하는 방법을 보여줍니다.

// GET /owners/42;q=11/pets/21;q=22

@GetMapping("/owners/{ownerId}/pets/{petId}")
public void findPet(
		@MatrixVariable(name="q", pathVar="ownerId") int q1,
		@MatrixVariable(name="q", pathVar="petId") int q2) {

	// q1 == 11
	// q2 == 22
}

다음 예에서 볼 수 있듯이 행렬 변수는 선택 사항으로 정의되고 기본값이 지정될 수 있습니다.

// GET /pets/42

@GetMapping("/pets/{petId}")
public void findPet(@MatrixVariable(required=false, defaultValue="1") int q) {

	// q == 1
}

모든 행렬 변수를 얻으려면 다음 예제와 같이 MultiValueMap을 사용할 수 있습니다.

// GET /owners/42;q=11;r=12/pets/21;q=22;s=23

@GetMapping("/owners/{ownerId}/pets/{petId}")
public void findPet(
		@MatrixVariable MultiValueMap<String, String> matrixVars,
		@MatrixVariable(pathVar="petId") MultiValueMap<String, String> petMatrixVars) {

	// matrixVars: ["q" : [11,22], "r" : 12, "s" : 23]
	// petMatrixVars: ["q" : 22, "s" : 23]
}

행렬 변수를 사용하도록 설정해야 합니다. MVC Java 구성에서는 경로 matching를 통해 removeSemicolonContent=falseUrlPathHelper를 설정해야 합니다. MVC XML 네임스페이스에서 <mvc:annotation-driven 활성화-matrix-variables="true"/>를 설정할 수 있습니다.

0개의 댓글