Spring 请求映射到列表中的特定项

Spring 请求映射到列表中的特定项,spring,Spring,抱歉,我是spring boot新手,正在尝试学习,我有一段代码,当我运行它时,如果我输入localhost/catalog/(任何用户ID),它将打开我的目录项的json请求。但是我想把它缩小到一个特定的用户ID我怎么能做到呢?例如,如果我放置localhost/catalog/friends我将只获取朋友的信息,如果我放置localhost/catalog/gameoftrones我将只获取gameoftrones的信息,而不是整个列表 代码: package com.poc.movieca

抱歉,我是spring boot新手,正在尝试学习,我有一段代码,当我运行它时,如果我输入
localhost/catalog/(任何用户ID)
,它将打开我的目录项的json请求。但是我想把它缩小到一个特定的用户ID我怎么能做到呢?例如,如果我放置l
ocalhost/catalog/friends
我将只获取朋友的信息,如果我放置
localhost/catalog/gameoftrones
我将只获取gameoftrones的信息,而不是整个列表

代码:

package com.poc.moviecatalog.controller;
导入com.poc.moviecatalog.models.CatalogItem;
导入java.util.Collections;
导入java.util.List;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RestController;
@RestController
@请求映射(“/catalog”)
公共级电影控制器{
@请求映射(“/{userId}”)
公共列表getCatalog(@PathVariable(“userId”)字符串userId){
返回数组.asList(
新目录项(“朋友”、“测试”,9),
新目录项(“Gameoftrones”,“test2”,3)
);
}
}

您可以尝试以下方法:

@RestController
@RequestMapping("/catalog")
public class MovieController {
    private Map<String, CatalogItem> storage = new HashMap<String, CatalogItem>() {{
        storage.put("friends", new CatalogItem("friends", "test", 9));
        storage.put("gameofthrones", new CatalogItem("gameofthrones", "test2", 3));
    }};

    @GetMapping
    public Collection<CatalogItem> getAllCatalogs() {
        return storage.values();
    }

    @GetMapping("/{userId}")
    public CatalogItem getCatalog(@PathVariable("userId") String userId) {
        return storage.get(userId);
    }

}
@RestController
@请求映射(“/catalog”)
公共级电影控制器{
私有映射存储=新HashMap(){{
存储。放置(“朋友”,新目录项(“朋友”,“测试”,9));
存储。放置(“Gameoftrones”,新目录项(“Gameoftrones”,“test2”,3));
}};
@GetMapping
公共集合getAllCatalogs(){
返回storage.values();
}
@GetMapping(“/{userId}”)
公共CatalogItem getCatalog(@PathVariable(“userId”)字符串userId){
返回storage.get(userId);
}
}
我已经用CatalogItem的所有实例初始化了映射。我将您的
userId
存储为键,实例存储为值。我定义了两个端点:一个用于获取所有对象,另一个用于仅查找一个对象

方法
getAllCatalogs()
返回响应中的所有对象。要调用此方法,可以请求
/catalog
路径

方法
getCatalog(stringuserid)
只返回一个对象作为响应 您请求的用户ID。您可以通过请求
/catalog/{userId}
路径仅获取一个实例。在方法
getCatalog(stringuserid)
中,我只是通过键(userId)在映射中找到一个实例


您可以使用另一种解决方案来存储对象(内存、数据库)而不是映射。

我认为您必须添加@RequestParam来处理该问题。所以您的url将类似于localhost/catalog/USERID?catalog=friends非常感谢Oleg,只是为了指出私有映射之后应该有一个分号。在这种情况下,使用了双括号初始化。分号放在两个右括号之后。但我不建议你用这种方法,因为它有一些缺点。
@RestController
@RequestMapping("/catalog")
public class MovieController {
    private Map<String, CatalogItem> storage = new HashMap<String, CatalogItem>() {{
        storage.put("friends", new CatalogItem("friends", "test", 9));
        storage.put("gameofthrones", new CatalogItem("gameofthrones", "test2", 3));
    }};

    @GetMapping
    public Collection<CatalogItem> getAllCatalogs() {
        return storage.values();
    }

    @GetMapping("/{userId}")
    public CatalogItem getCatalog(@PathVariable("userId") String userId) {
        return storage.get(userId);
    }

}