关于使用泽西岛和吉斯进行RESTful服务的实用建议

2022-08-31 15:24:52

从我在网上找到的信息来看,自2008年以来,Guice + Jersey整合的最新技术一直停滞不前,当时两支球队似乎都陷入了僵局。问题的症结在于 JAX-RS 注释执行字段和方法注入,这与 Guice 自己的依赖注入并不相符。

我发现的几个例子不足以阐明:

  • Iqbalyusuf在Google App Engine Java上关于Jersey + Guice的帖子遭受了很多样板(手动获取和调用注入器)的影响。我希望绑定和注入应该通过Guice注释在幕后进行。

  • Jonathan Curran的文章《使用 Jersey、Guice 和 JSR-250 创建 RESTful 服务》给了我希望,因为它要时效得多(2010 年),但除了展示如何在 Guice ServletModule 中启动 Jersey 服务之外,别无他法。但是,没有进行任何真正的依赖注入的示例。我想这是留给读者的练习。事实上,Curran的帖子可能是将Guice和Jersey连接起来的正确第一步,所以我计划从这一点开始。

  • 詹姆斯·斯特拉坎(James Strachan)写道

    JAX-RS与依赖注入框架(如Spring,Guice,GuiceyFruit或JBossMC)配合得很好 - 你基本上可以选择任何一个你喜欢的框架。

    但从从业者的角度来看,我没有看到任何证据是正确的。

我发现缺少的是如何组合 JAX-RS 和 Guice 注释的实际示例和解释。例如:

  • 我相信我不能对任何资源使用构造函数注入,因为泽西岛想要控制这一点
  • 我不确定我是否可以将@Inject与@PathParam,@QueryParam等人结合起来。
  • 如何在 MessageBodyWriter 实现中使用注入

有没有人有例子,最好是有来源的,结合泽西岛和吉斯而不牺牲一个或另一个在此过程中的非平凡应用?无论如何,我一直在这条路上,但是泽西岛和吉斯名单上的零碎部分让我觉得我在重复在我之前的其他人的工作。


答案 1

Guice与泽西岛的整合并没有停滞不前。事实恰恰相反。感谢 Paul 和他在 Jersey 背后的同伙,最新的 1.7 版本包含一个特殊的 JerseyServletModule 类,可与基于 Guice 的 servlet 配合使用。基于 Guice 的构造函数注入 JAX-RS 资源工作正常!问题是在 JAX-RS 资源的构造函数中使用 JAX-RS 注释(如@QueryParam)。你不需要它!您使用 Guice 进行 POJO 注入,包括单例。然后,JAX-RS只是解析基于HTTP的RESTful API(如URL路径,查询参数,内容类型等)锦上添花。你也不需要一个“工业实力”的例子。Guice和Jeric都已经过战斗测试。您只需要一个完整的工作示例即可了解其工作原理。然后,您可以自己试验高级功能。查看以下链接,获取使用 Guice 3.0 和 Jersey 1.7 的完整示例,它们都是最新版本:
http://randomizedsort.blogspot.com/2011/05/using-guice-ified-jersey-in-embedded.html


答案 2

我在这里创建了一个Guice/Jersey/Jetty/Jackson示例应用程序:

http://github.com/sunnygleason/j4-minimal

如果您对如何改进示例有任何疑问或建议,请随时通过github给我发消息。目标是使这成为Java堆栈上REST的非常容易理解的介绍。

希望这有帮助 - 祝你有美好的一天!

-阳光明媚


推荐