2011-11-22 50 views
0

考虑以下ServerResource派生类型:是否有可能在Restlet中强类型化HTTP请求处理程序?

public class UserResource extends ServerResource { 
    @Get 
    public User getUser(int id) { 
    return new User(id, "Mark", "Kharitonov"); 
    } 
} 

(是的,它总是返回相同的用户,无论给定的ID)。

它有可能使它在Restlet中工作吗?因为,据我了解,在GET处理的预期的签名是:

Representation get(); 

OR

Representation get(Variant v); // (no idea what it means yet) 

现在我明白了,我可以实现非类型安全的GET处理提取参数从请求中调用getUser,之后从结果中构造出相应的Representation实例并返回。但是这是一个样板代码,它不属于应用程序代码,它的位置在框架内。至少,这是如何通过OpenRasta完成的 - 我一直在.NET中使用的REST框架。

谢谢。

回答

0

你应该从签名

@Get 
    public User getUser() { 
    String id = getQuery().getFirstValue("id"); 
    return new User(id, "Mark", "Kharitonov"); 
    } 

删除参数无需为@Get注释会自动检测覆盖的get()在这种情况下的方法。

+0

OK,所以GET http:// bla-bla-bla/user/2被路由到'getUser',如果我们假设POST http:// bla-bla-bla/user被路由到'newUser',那么'getUser'和'newUser'不能在同一个'ServerResource'中,否则GET http:// bla-bla-bla/user也会被路由到'getUser'!看起来,尽管GET和POST提到了相同的资源('User'),它们必须由不同的“ServerResource”实例处理。这有点令人失望...... – mark

相关问题