我是Glassfish和MOXy的粉丝,对我来说MOXy捆绑在Glassfish v4中对我来说是个好消息。
我在互联网上阅读并尝试了一些MOXy示例,我喜欢动态OXM_META_DATA_SOURCE部分,因为在提供RESTful服务时,“客户端视角”比域类非常灵活。
所以这就是问题所在:
不同的RESTful服务可以具有来自相同域类的不同视图,在我的工作中,这是非常常见的情况。因此,每个服务都可以有很多绑定的OXM元数据文件。而且我们知道单个OXM元数据文件只能对应一个java包。因此,将有更多的OXM元数据文件需要维护。
回到JAX-RS,是否有任何框架来设计模式或最佳实践来完成OXM元数据文件集与服务本身之间的映射?
答案 0 :(得分:1)
您可以尝试在Jersey 2.3中引入的名为实体过滤的新功能。即使实体过滤不是基于OXM_META_DATA_SOURCE
,您也可以通过它实现目标:
假设您有以下域类(注释是自定义实体过滤注释):
public class Project {
private Long id;
private String name;
private String description;
@ProjectDetailedView
private List<Task> tasks;
@ProjectAnotherDetailedView
private List<User> users;
// ...
}
当然还有一些JAX-RS资源,即:
@Path("projects")
@Produces("application/json")
public class ProjectsResource {
@GET
@Path("{id}")
public Project getProject(@PathParam("id") final Long id) {
return ...;
}
// ...
}
现在,我们在域类(通过注释)和资源类上定义了2个详细视图。如果您使用:
注释getProject
资源方法
id
,name
,description
以及来自Project的tasks
列表id
,name
,description
以及来自Project的users
列表如果您保留资源方法未注释,则生成的实体将仅包含:id
,name
,description
。
您可以在Entity Filtering中找到有关User Guide的更多信息,或者您可以在我们的示例中直接尝试:entity-filtering。
注1:实体过滤目前仅适用于JSON媒体类型(通过MOXy)。计划在未来添加对其他媒体类型/提供商的支持。
注2: Jersey 2.3未集成到GF 4.0的任何(推广)版本中。应该是GF 4.0的一部分的下一个泽西版本是2.4。我们计划在未来几周内发布2.4。