2

我是 Glassfish 和 MOXy 的粉丝,MOXy 已被捆绑到 Glassfish v4 中对我来说是个好消息。

我在互联网上阅读并尝试了一些 MOXy 示例,我喜欢动态 OXM_META_DATA_SOURCE 部分,因为在提供 RESTful 服务的同时,“客户端视角”比域类非常灵活。

所以这里是问题:

不同的 RESTful 服务可以从相同的域类中获得不同的视图,在我的工作中这是非常常见的情况。因此,每个服务都可能有很多绑定 OXM 元数据文件。我们知道,一个 OXM 元数据文件只能对应一个 java 包。所以会有更多的 OXM 元数据文件需要维护。

回到 JAX-RS,是否有任何框架来设计模式或最佳实践来完成 OXM 元数据文件集和服务本身之间的映射?

4

1 回答 1

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资源方法:

  • @ProjectDetailedView - 返回的实体将包含来自Projectid的列表namedescriptiontasks
  • @ProjectAnotherDetailedView - 返回的实体将包含来自Projectid的列表namedescriptionusers

如果您将资源方法保留为未注释,则生成的实体将仅包含:id, name, description

您可以在用户指南中找到有关实体过滤的更多信息,也可以在我们的示例中直接尝试:实体过滤

注意 1:实体过滤目前仅适用于 JSON 媒体类型(通过 MOXy)。计划在未来添加对其他媒体类型/提供商的支持。

注 2: Jersey 2.3 未集成到任何(升级的)GF 4.0 版本中。应该成为 GF 4.0 一部分的下一个 Jersey 版本是 2.4。我们计划在接下来的几周内发布 2.4。

于 2013-10-14T12:05:40.467 回答