在API类中添加REST Web服务注释



我正在使用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);
}

原因是1Llong)与1int)不同。因此,检索地图条目不会返回long值的任何结果。