首页 > 解决方案 > 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

第一个函数被调用。我的理解是确切的匹配应该在前面。这是不正确的吗?

标签: javaspringspring-boot

解决方案


?无法使用@PathVariable注释绑定以下 URL中的内容:

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);
}

推荐阅读