【问题标题】:What is the difference between JerseyServletModule and ServletModule?JerseyServletModule 和 ServletModule 有什么区别?
【发布时间】:2018-08-06 17:22:57
【问题描述】:

我正在尝试了解jersey-guice 库中的JerseyServletModuleGuice 库中的ServletModule 之间的区别。

【问题讨论】:

    标签: jersey guice guice-servlet


    【解决方案1】:

    TL;DR - JerseyServletModule 已死。它曾经(在 Jersey 1 天)允许您使用 Jersey 和 Guice 并让它们玩得很好。这不再简单。

    ServletModule 是一个 Guice 模块,它允许您使用 Guice 配置 servlet、servlet 映射、过滤器和过滤器映射(以及其他内容)以及将对象注入您的 servlet。创建一个继承自 ServletModule 的类并重写 configureServlets 方法,如下所示:

    class MyModule extends ServletModule {
    
        @Override
        protected void configureServlets() {
            serve("/hello").with(HelloAppEngine.class);
        }
    }
    

    使用 Guice 和 ServletModule 构建 Web 服务的文档是 here

    Jersey 是 JSR 370 的实现,即所谓的 JAX-RS API,用于创建休息服务。它允许您仅使用带注释的类来构建休息服务 - 例如:

    @Path("/user")
    public class UserController {
    
        UserPersistService userPersistService;
    
        ObjectMapper objectMapper;
    
        UserController(UserPersistService userPersistService, ObjectMapper objectMapper) {
            this.userPersistService = userPersistService;
            this.objectMapper = objectMapper;
        }
    
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public String getUsersAsJSON() throws IOException {
            final List<User> users = userPersistService.getUsers();
            return objectMapper.writeValueAsString(users);
        }
    }
    

    在 Jersey 1.0 的旧时代,覆盖 JerseyServletModule 而不是 Servlet Module 将允许您同时执行这两项操作,因此上述类可能变为:

    @Singleton
    @Path("/user")
    public class UserController {
    
        @Inject
        UserPersistService userPersistService;
    
        @Inject
        ObjectMapper objectMapper;
    
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public String getUsersAsJSON() throws IOException {
            final List<User> users = userPersistService.getUsers();
            return objectMapper.writeValueAsString(users);
        }
    

    然而,正如我在开头提到的那样,在 Jersey 2.0 中没有与 JerseyServletModule 等效的东西。您的选择是配置 HK-Guice 桥接器并继续使用 Jersey,或者使用 RestEasy,它是一种替代 JAX-RS 实现,可以很好地与 guice 配合使用。

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      • 2013-08-19
      相关资源
      最近更新 更多