java - Spring Boot @RequestMapping 是否完全匹配请求?
问题描述
我有一个 Spring Boot API,它具有提供分页的端点。
@RequestMapping(path = "/most-popular", method = GET)
@Override
public List<RefinedAlbum> getMostPopularDefault() {
return albumService.getMostPopular(0, 25);
}
@RequestMapping(path = "/most-popular?offset={offset}&limit={limit}", method = GET)
@Override
public List<RefinedAlbum> getMostPopular(@PathVariable("limit") int limit, @PathVariable("offset") int offset) {
inputValidation(limit, offset);
return albumService.getMostPopular(limit, offset);
}
但是当我向服务提出请求时,例如:
http://localhost:5250/api/v1/albums/most-popular?offset=100&limit=125
第一个函数被调用。我的理解是确切的匹配应该在前面。这是不正确的吗?
解决方案
?
无法使用@PathVariable
注释绑定以下 URL中的内容:
http://localhost:5250/api/v1/albums/most-popular?offset=100&limit=125
您的路径只是http://localhost:5250/api/v1/albums/most-popular
,之后的内容由两个请求参数组成,即。offset
和limit
。您使用@RequestParam
注释将请求参数绑定到控制器中的方法参数:
@RequestMapping(path = "/most-popular", method = GET)
@Override
public List<RefinedAlbum> getMostPopular (@RequestParam("limit") int limit,
@RequestParam("offset") int offset) {
inputValidation(limit, offset);
return albumService.getMostPopular(limit, offset);
}