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