Spring Boot @RequestMapping是否完全匹配请求?

时间:2018-08-10 21:33:31

标签: java spring spring-boot

我有一个Spring Boot API,该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

第一个函数被调用。我的理解是确切的匹配应该先于。那不对吗?

1 个答案:

答案 0 :(得分:1)

以下网址中?之后的内容无法使用@PathVariable注释进行绑定:

http://localhost:5250/api/v1/albums/most-popular?offset=100&limit=125

您的路径仅为http://localhost:5250/api/v1/albums/most-popular,其后的内容包括两个请求参数,即。 offsetlimit。您可以使用@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);
}