我正在使用Spring Boot(1.5.3)来创建Spring REST Web服务。我添加了spring-boot-starter-web
作为唯一的依赖项(根据春季指南)。接下来,我为我的服务类创建了UserManagementService
接口。
@RequestMapping("/usermanagement/v1")
public interface UserManagementService {
@RequestMapping(value = "/user/{id}/", method=RequestMethod.GET)
public UserTo getUserById(@PathVariable("id") long id);
@RequestMapping(value = "/users/", method=RequestMethod.GET)
public List<UserTo> getAllUsers();
}
及其实施UserManagementServiceImpl
@RestController
public class UserManagementServiceImpl implements UserManagementService {
private Map<Integer, UserTo> users;
public UserManagementServiceImpl() {
users = new HashMap<>();
users.put(1, new UserTo(1, "Smantha Barnes"));
users.put(2, new UserTo(2, "Adam Bukowski"));
users.put(3, new UserTo(3, "Meera Nair"));
}
public UserTo getUserById(long id) {
return users.get(id);
}
public List<UserTo> getAllUsers() {
List<UserTo> usersList = new ArrayList<UserTo>(users.values());
return usersList;
}
}
我想用最少配置的Spring Boot创建一个REST Web服务,并认为这样可行。但在访问我的Web服务时,我收到了无响应。我缺少什么?
此外,我已经看到许多项目,其中注释被添加到接口而不是实现类。我认为这比注释类更好。它应该在这里工作,对吗?
答案 0 :(得分:0)
作为mentioned in the comments,并非接口上都支持所有注释。例如@PathVariable
注释将不起作用,因此您必须将其放在实现本身上:
public UserTo getUserById(@PathVariable("id") long id) {
return users.get(id);
}
除此之外,您还有一个Map<Integer, UserTo>
,但您正在使用类型为@PathVariable
的{{1}}检索用户。这也不起作用,因此要么将long
的密钥更改为users
,要么将Long
参数更改为id
:
int
原因是public UserTo getUserById(@PathVariable("id") int id) {
return users.get(id);
}
(1L
)与long
(1
)不同。因此,检索映射条目不会返回int
值的任何结果。