如何构造jersey路径以避免大型类

如何构造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

我正在构建一个以用户为中心的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(“user”)注释该类。现在我必须添加我的所有rest路径,它在这个类中以
/user
开头(在本例中,是picture,anSoOn)。这将极大地破坏我的用户类,因为在所有资源上,我还将提供所有粗糙的操作。泽西岛是否有办法将子路径
/user/{user_id}/case
等拆分

编辑:感谢卢茨·霍恩的回答。我想补充更多信息:


关于
/case
/user
的操作也应该是可能的。这将导致为
@Path(“/user”)
@Path(“/case”)
@Path(“/user/{userid}/case”)
创建类。如果在这种情况下只能创建两个类就好了:
@Path(“/user”),@Path(“/case”)
。但我想这是不可能的…

这是一个非常合理的问题。。。在每个类定义了非常大的根资源(有许多“子资源”)之后,我也开发了非常长的类。。。根资源是指类定义上的
@Path
资源声明

这是我刚刚测试过的,可能是一个很好的“模式”,可以更好地设计和组织(子)“资源”类。基本上,我们的想法是在更细粒度的级别(我们称之为“子资源”)创建一个根资源(每个类):

  • /rest/user/{user_id}/Case
    的api.test.com.rest.user.Case.java类,包含在此“子资源”上执行所有CRUD操作的方法
  • /rest/user/{user_id}/Picture
    的api.test.com.rest.user.Picture.java类,包含在该“子资源”上执行所有CRUD操作的方法
因此,基本上您可以将类组织在每个资源的包中(例如:
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”)