Lio*_*orK 2 java rest dao dropwizard
我已经创建了 Dropwizard Resource 并将其映射到 REST API。现在我想从我的代码中的其他点重用这个资源 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();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意 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));
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在 ProviderResource 正在播出,我想从我的代码中使用它。就像是:
ArrayList<Provider> providers = iDontKnowHowToGetProviderResource.getAll();
Run Code Online (Sandbox Code Playgroud)
你怎么说?
我认为我的问题基本上是错误的设计(这就是为什么使用其他资源中的资源不是微不足道的)。
资源层用于将 REST API URL 映射到方法中。这些方法包含我们想要实现的操作的逻辑。一个好的设计是在分离的服务(Java 类而不是“DropWizard 服务”)中编写这些逻辑。
这些服务类最好在run()方法中初始化一次,并作为构造函数依赖传递给相关资源。通过这种方式,我们可以创建具有逻辑的服务,以便在不同的资源中重用,并且每个资源都将保留其依赖项(与我的问题代码示例中的 dao 相同)
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |