Это называется Partial Binding
, оно используется для получения всех переменных из этого сегмента в этом пути или если вы хотите получить каждую переменную из этого сегмента пути docs , и выходные данные неверны в этой документации здесь
В вашем примере вы получите все переменные, которые находятся в пути после petId
{21}
// GET /owners/42;q=11;r=12/pets/21;q=22;s=23
@MatrixVariable(pathVar="petId") Map<String, String> petMatrixVars)
Если вы хотите получить только q
после petId
сегмента, тогда
@MatrixVariable(value ="q",pathVar="petId") int q
Вот пример с выводом, для @MatrixVariable
нам нужно сначала включить их
import org.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
Контроллер с методом @requestmapping
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public void findPet(
@MatrixVariable Map<String, String> matrixVars,
@MatrixVariable(pathVar="petId") Map<String, String> petMatrixVars) {
System.out.println(matrixVars);
System.out.println(petMatrixVars);
}
}
Запрос: http://localhost:8080/sample/owners/42;q=11;r=12/pets/21;q=22;s=23
Выход:
{q=11, r=12, s=23}
{q=22, s=23}
А если я поменяю @MatrixVariable Map<String, List<String>> matrixVars,
вывод
{q=[11, 22], r=[12], s=[23]}
{q=22, s=23}