如何构造jersey路径以避免大型类
我正在构建一个以用户为中心的restful api。这意味着每个请求都以用户开始:如何构造jersey路径以避免大型类,jersey,jersey-2.0,Jersey,Jersey 2.0,我正在构建一个以用户为中心的restful api。这意味着每个请求都以用户开始:api.test.com/rest/user/{user_id}。从这个/用户路径开始,可以获得关于用户的各种资源。例如 api.test.com/rest/user/{user_id}/case api.test.com/rest/user/{user_id}/picture api.test.com/rest/user/{user_id}/anSoOn 使用jersey,我创建了一个类,并用@Path(“us
api.test.com/rest/user/{user_id}
。从这个/用户路径开始,可以获得关于用户的各种资源。例如
api.test.com/rest/user/{user_id}/case
api.test.com/rest/user/{user_id}/picture
api.test.com/rest/user/{user_id}/anSoOn
使用jersey,我创建了一个类,并用@Path(“user”)注释该类。现在我必须添加我的所有rest路径,它在这个类中以/user
开头(在本例中,是picture,anSoOn)。这将极大地破坏我的用户类,因为在所有资源上,我还将提供所有粗糙的操作。泽西岛是否有办法将子路径/user/{user_id}/case
等拆分
编辑:感谢卢茨·霍恩的回答。我想补充更多信息:
关于
/case
和/user
的操作也应该是可能的。这将导致为@Path(“/user”)
、@Path(“/case”)
和@Path(“/user/{userid}/case”)
创建类。如果在这种情况下只能创建两个类就好了:@Path(“/user”),@Path(“/case”)
。但我想这是不可能的…这是一个非常合理的问题。。。在每个类定义了非常大的根资源(有许多“子资源”)之后,我也开发了非常长的类。。。根资源是指类定义上的@Path
资源声明
这是我刚刚测试过的,可能是一个很好的“模式”,可以更好地设计和组织(子)“资源”类。基本上,我们的想法是在更细粒度的级别(我们称之为“子资源”)创建一个根资源(每个类):
的api.test.com.rest.user.Case.java类,包含在此“子资源”上执行所有CRUD操作的方法李>/rest/user/{user_id}/Case
的api.test.com.rest.user.Picture.java类,包含在该“子资源”上执行所有CRUD操作的方法/rest/user/{user_id}/Picture
api.test.com.rest.user.*
package将包含每个资源“user”的“子资源”的类)
在“子资源”类中,您将获得以下类型的构造:
@Path("/user/{user_id}/case")
public class Case {
@GET
@Produces(MediaType.APPLICATION_JSON)
public UserCase getUserCase(@PathParam("user_id") String userID) {
...
}
// all other CRUD operations on "user/user_id/case"
如您所见,处理GET的“方法”没有路径。。。您将只在“类”级别声明的@Path
上执行CRUD操作。。。这些操作还从那里获取用户id
在某些情况下,您可能需要在这些类中组合更多的“子资源”CRUD操作。。。但这种设计应该允许更好地划分代码(与“大类”相比)
嗯 你试过这个吗?我想它可以解决您的问题:“如果在本例中只能创建两个类就好了:@Path(“/user”),@Path(“/case”)。”。。。i、 例如,应该可以创建两个类
Case
和User
,尽管Case
类可能需要是@Path(“/User/{User\u id}/Case”)
。