我正在使用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服务时,我没有得到任何回应。我缺少什么?
另外,我看到了许多项目,其中注释被添加到接口而不是实现类中。我认为这比注释课程更好。它应该在这里工作,对吗?
如注释中提到的,并非所有注释都在接口上支持。例如,@PathVariable
注释无法正常工作,因此您必须将其放在实现本身上:
public UserTo getUserById(@PathVariable("id") long id) {
return users.get(id);
}
除此之外,您还有一个Map<Integer, UserTo>
,但是您使用long
类型的@PathVariable
检索用户。这也不起作用,因此要么将users
的密钥更改为Long
,要么将id
参数更改为int
:
public UserTo getUserById(@PathVariable("id") int id) {
return users.get(id);
}
原因是1L
(long
)与1
(int
)不同。因此,检索地图条目不会返回long
值的任何结果。