java - 如何直接访问 Dropwizard 资源,而不是通过 REST

标签 java rest dao dropwizard

我已经创建了 Dropwizard Resource 并将其映射到 REST API。 现在我想在我的代码中的其他点重用这个 Resource API 作为 JAVA API。 我该怎么做?

这是资源类:

@Path("/providers_new")
public class ProviderResource {
    private ProviderDAO dao;

    public ProviderResource(ProviderDAO dao) {
        this.dao = dao;
    }

    @GET
    @Path("/get")
    @Produces("application/json")
    public List<Provider> getAll() {
        return dao.getAllProviders();
    }
}

请注意,ProviderResource 是用 dao 初始化的:

public class EntitiesService extends Service<EntitiesServiceConfiguration> {
    public static void main(String[] args) throws Exception {
        new EntitiesService().run(args);
    }

    @Override
    public void initialize(Bootstrap<EntitiesServiceConfiguration> bootstrap) {
        bootstrap.setName("entities");
        ...
    }

    @Override
    public void run(EntitiesServiceConfiguration configuration,
                Environment environment) throws ClassNotFoundException {
        final DBIFactory factory = new DBIFactory();
        final DBI jdbi = factory.build(environment, configuration.getDatabaseConfiguration(), "my_db");
        final ProviderDAO dao = jdbi.onDemand(ProviderDAO.class);
        environment.addResource(new ProviderResource(dao));
        ...
    }
}

既然 ProviderResource 正在播出,我想在我的代码中使用它。像这样的东西:

ArrayList<Provider> providers = iDontKnowHowToGetProviderResource.getAll();

你说呢?

最佳答案

我认为我的问题基本上是错误的设计(这就是为什么从其他资源中使用资源并非易事)。

资源层用于将 REST API URL 映射到方法中。 这些方法包含我们要实现的操作的逻辑。 一个好的设计是在单独的服务中编写这些逻辑(Java 类而不是“DropWizard 服务”)。

这些Services类最好在run()方法中初始化一次,作为构造依赖传递给相关的Resources。 通过这种方式,我们可以创建具有逻辑的服务,以便在不同的资源中重用,并且每个资源都将保留其依赖项(与我的问题代码示例中的 dao 相同)

关于java - 如何直接访问 Dropwizard 资源,而不是通过 REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494812/

相关文章:

java - 如何在 Java 10 附带的 Java Mission Control 中获得分配压力?

c# - 为什么我的带有双参数的 Web API 方法没有被调用?

rest - Camel : Modify output before routing

java - 如何传递授权参数?

java util logging.properties : How to log to two different files

java - 如何在没有applicationContext的情况下在Spring服务类中请求Prototype bean

java - 如何验证对 Android 应用程序的请求

java - 带有 Hibernate 和 Spring 的通用 DAO,是不是比这更好的方法?

Java Web 应用程序 sql 结果与对象列表

java - 从jsp传递参数到DAO中的sql查询