我是Restlet的新手,但我已经关注了Restlet自己的网站上的教程,并启动并运行了一个基本的应用程序。我现在正在做的是,我正在设置基本ServerResource
并公开@Get
方法。
我想要的是能够调用/ user / {userId}并获取用户表示。是否有可能以某种方式将{userId}的映射移交给Restlet,而Restlet又会调用getUser(String userId)
中的ServerResource
?
答案 0 :(得分:2)
在框架中本身不支持这种特征(将路径变量绑定到带注释的方法参数中)。仅在输入表示中支持带注释的方法签名中的这种映射。
要获取请求的路径变量,您可以从请求对象(方法getAttribute
)获取它们,如下所述:
public class UserServerResource extends ServerResource {
@Get
public User getUser() {
String userId = getAttribute("userId");
User user = (...)
(...)
return user;
}
}
如果要跨多个方法共享此路径变量,可以将其定义为实例变量(请注意,为每个请求创建服务器资源的新实例,这与Spring REST不同,其中每个控制器都是单例等等变量必须在方法签名中定义)。我们可以利用服务器资源的方法doInit
,如下所述:
public class UserServerResource extends ServerResource {
private String userId;
private User user;
@Override
protected void doInit() throws ResourceException {
super.doInit();
userId = getAttribute("userId");
// for example
user = loadUser(userId);
// throws a status 404 if user can't be found
setExisting(user != null);
}
@Get
public User getUser() {
return user;
}
@Put
public User saveUser(User user) {
saveUser(user);
return user;
}
@Delete
public void deleteUser() {
deleteUser(user);
}
}
如果您确实想要使用从请求元素(如路径变量,...)到方法参数的映射,则应使用JAXRS。 Restlet提供了对此规范的支持。使用JAXRS实现与上面类似的服务器资源如下所述:
@Path("/users/{userId}")
public class UserResource {
@GET
@Produces("text/xml")
public String getUser(@PathParam("userId") String userId) {
(...)
}
}
有关详细信息,请查看相应的文档:http://restlet.com/technical-resources/restlet-framework/guide/2.2/extensions/jaxrs。
跳起来有帮助, 亨利