1

有一个要求:

对于每个 RESTful 资源方法,都有一组 OXM 元数据文件。我需要在创建 JAXBContext 时加载这些文件。所以我需要知道每个请求的 ResourceInfo,然后从 Resource Method 上的一些 Annotation 映射,它可以指示应该加载哪一组 OXM 元数据文件。

  1. ResourceInfo 是每个请求的吗?
  2. 我可以在EntityProvider中获取每个请求的Method(资源方法),例如MessageBodyReader和MessageBodyWriter吗?
  3. JPA Entity 和 XML/JSON 之间或 TO 和 XML/JSON 之间的 OXM 元数据,您更喜欢哪个?因为我假设每个服务 TO 可以自定义域类的视图到客户端。
4

2 回答 2

0

我有类似的问题。经过几个小时的研究,我通过直接注入能够解析资源方法的提供者得到了我想要的:

@Inject
Provider<RoutingContext> routingContextProvider;


    log.info("routing method == " + routingContextProvider.get().getResourceMethod());
于 2013-11-17T20:07:36.047 回答
0

经过一些研究和实验,我终于取得了突破。

  1. ResourceInfo 是每个请求的吗?[ANS] 是的,如 javadoc 中所述。
  2. 我可以在EntityProvider中获取每个请求的Method(资源方法),例如MessageBodyReader和MessageBodyWriter吗?[ANS] JIRA 有一个与此非常相似的缺陷,它说 ResourceInfo 无法注入过滤器,发现的拦截器,也许它会在 glassfish.jersey 团队的某个版本中修复。

  3. JPA Entity 和 XML/JSON 之间或 TO 和 XML/JSON 之间的 OXM 元数据,您更喜欢哪个?因为我假设每个服务 TO 可以自定义域类的视图到客户端。[ANS] 最后我决定使用 JPA 实体以外的 TO 作为模块导出的概念。因为它们的开发生命周期不同,并且使用 JPA Entity 和 OXM 也有一些限制。一个。开发生命周期:TO 设计为可导出其他模块或上层服务的接口,应该是在案例设计阶段根据需求确定的,由于是带接口交付的,所以 TO 的内容应该是比较稳定的,变化应该还要遵循版本管理。但是实体设计要灵活得多,并且会不时更改,这些更改应该对本模块的客户端隐藏,有时里面有业务逻辑。我知道有一些公司或架构将实体暴露给其他模块,或者只有 1 个模块,所以没关系。但我选择隐藏域类。湾。在服务层使用 JPA Entity 暴露时,MOXy 提供 Mapping JPA Entity 和 RESTful Entity body 是一个不错的选择。然后由于一些延迟加载的需求,ORM 框架会隐式地进行一些类转换或字节码生成工作,并且一些额外的延迟加载相关字段会在运行时加载或在编译时生成,这些字段会在 MOXy 中导致一些无聊的错误,而OXM 使用 FIELD 作为访问器类型。您必须切换到 PROPERTY 模式或在 OXM 元数据中定义上帝知道的字段以隐藏它们。否则必须在 JPA Entity 类上定义 Getter 和 Setter,

并且引入 TO 会降低 OXM 工作的复杂度,使用的元数据文件会少很多,在 TO 类上加上注释,OXM 元数据文件可以为零,而且我认为 OXM 元数据文件旨在集成不同的系统而不是连接内部的模块一个系统。所以答案是:

我比 JPA 实体更喜欢。

于 2013-10-08T12:01:34.517 回答