【问题标题】:How to pass parameters to REST resource using Jersey 2.5如何使用 Jersey 2.5 将参数传递给 REST 资源
【发布时间】:2014-01-12 11:21:20
【问题描述】:

我有一个为我的客户服务的 Java 服务器(不是应用程序服务器)。

现在我有兴趣添加 REST 支持。我已经初始化了一个 Jetty 服务器并创建了一些 REST 资源。

我的问题是:如何在创建 REST 资源时传递参数?

通常我更喜欢在每个资源的构造函数中,但我不控制它。

我知道有一种注入依赖项的方法。使用 Jersey 2.5 怎么做??

谢谢!

【问题讨论】:

  • 我认为用 Spring 创建 REST 服务器要简单得多,看这个例子 spring.io/guides/gs/rest-service 这仍然使用 Jersey,但需要更少的代码来创建整个 REST 服务。
  • 我已经创建了 REST 服务,但我只需要将参数传递给每个 REST 资源的构造函数。
  • 显示一些代码,这样会更容易帮助

标签: java rest embedded-jetty jersey-2.0


【解决方案1】:

定义您的应用程序

public class MyApplication extends ResourceConfig {
  public MyApplication() {
    register(new FacadeBinder());
    register(JacksonFeature.class);
    register(MyEndpoint.class);
}

配置注入

public class FacadeBinder extends AbstractBinder {

  @Override
  protected void configure() {
    bind(MyManager.class).to(MyManager.class);
  }
}

在端点中注入配置的类

@Path("/jersey")
public class MyEndpoint {
  @Inject
  MyManager myManager;
  ...
}

【讨论】:

  • 这几乎看起来很完美,只是在“FacadeBinder”中我传递了自定义类的 .class 而不是创建实例并在构造函数中传递参数。
  • 您应该重新考虑编程实践,以避免在业务代码中使用运算符 new。考虑使用工厂来自定义实例创建。
【解决方案2】:

我不明白你所说的依赖是什么意思。

你应该检查这个:https://jersey.java.net/documentation/latest/user-guide.html#d0e1810

【讨论】:

  • 我对指南很熟悉。但我仍然不清楚如何完成我所需要的。
  • 我只需要一种将类实例传递给 REST 资源的方法。
  • 我认为你可以使用@BeanParam 注释
【解决方案3】:

除了使用依赖注入之外,另一个选择是自己实例化和注册 REST 端点。 Jersey 允许您以与 Dymtro 示例中所示的依赖注入非常相似的方式执行此操作。大量借鉴 Dymtro,定义您的端点:

@Path("/jersey")
public class MyEndpoint {
    private MyManager myManager;
    public MyEndpoint(MyManager myManager) {
        this.myManager = myManager;
    }
    ....
}

定义您的应用程序:

public class MyApplication extends ResourceConfig {
    public MyApplication(MyManager myManager) {
        register(JacksonFeature.class);
        register(new MyEndpoint(myManager));
        ....
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2018-09-13
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多