我一直在尝试获取一个简单的 REST API 来列出集合的内容,并且我正在使用矩阵变量来控制分页。
我的控制器有以下方法来列出集合的内容:
@RequestMapping(
value = "articles",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ArticlePageRestApiResponse listArticles(
@MatrixVariable(required = true, defaultValue = 100, value = "resultsPerPage") int resultsPerPage,
@MatrixVariable(required = true, defaultValue = 0, value = "pageNumber") int pageNumber) {
// some logic to return the collection
}
如果我然后执行 GET http://example.com/articles;resultsPerPage=22;pageNumber=33它无法找到请求映射。我通过添加以下内容启用了矩阵变量支持:
@Configuration
public class EnableUriMatrixVariableSupport extends WebMvcConfigurationSupport {
@Override
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping hm = super.requestMappingHandlerMapping();
hm.setRemoveSemicolonContent(false);
return hm;
}
}
我发现如果矩阵变量以至少一个模板变量为前缀,则矩阵变量被正确分配。以下工作但很难看,因为我不得不将 URI 路径的一部分作为模板变量,该变量总是“文章”,以欺骗请求映射处理程序认为至少有一个 URI 模板变量:
@RequestMapping(
value = "{articles}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ArticlePageRestApiResponse listArticles(
@PathVariable("articles") String ignore,
@MatrixVariable(required = true, defaultValue = 100, value = "resultsPerPage") int resultsPerPage,
@MatrixVariable(required = true, defaultValue = 0, value = "pageNumber") int pageNumber) {
// some logic to return the collection
}
我发现了一个错误还是我误解了矩阵变量?