如何从Dropwizard资源中的config.yml文件中获取String?

时间:2018-04-11 09:14:02

标签: java guice dropwizard

我想在我的Dropwizard public class DropwizardBackendConfiguration extends Configuration { @NotEmpty private String uploadFileLocation; @JsonProperty public String getUploadFileLocation() { return uploadFileLocation; } @JsonProperty public void setUploadFileLocation(String uploadFileLocation) { this.uploadFileLocation = uploadFileLocation; } } 中使用geta String并从资源类访问它。

我已将该类添加到配置

 public void run(
      final DropwizardBackendConfiguration configuration, final Environment environment) {
...
 System.out.println(configuration.getUploadFileLocation());


}

我可以在run方法中获取内容

$date = new DateTime( "NOW" );
echo $date->format( "m-d-Y H:i:s.u" );

但是如何在我的资源类中获取此值。

2 个答案:

答案 0 :(得分:3)

如果要在Jersey资源中使用完整的DropwizardBackendConfigurationuploadFileLocation,则必须将其作为构造函数参数传递。

入门指南illustrates this with the HelloWorldResource。在此示例中,有两个构造函数参数:

public HelloWorldResource(String template, String defaultName)

此课程的一个实例是registered in the run method

@Override
public void run(HelloWorldConfiguration configuration,
                Environment environment) {
    final HelloWorldResource resource = new HelloWorldResource(
        configuration.getTemplate(),
        configuration.getDefaultName()
    );
    environment.jersey().register(resource);
}

使用您的配置和资源类执行类似的操作。

答案 1 :(得分:-1)

可能已经晚了,但是您可以通过dropwizard-guice依赖关系来完成,该库使用Google guice进行依赖关系注入,并使用注释来配置Java对象。 As an extract from this article by Ricky Yim

您可以将属性注入资源,如下所示

package com.github.codingricky;

import com.google.inject.Inject; 
import com.google.inject.name.Named;
import javax.ws.rs.GET; 
import javax.ws.rs.Path;

@Path("/hello")
public class HelloResource { 
   private final String message;

   @Inject
   public HelloResource(@Named("message") String message) {
      this.message = message;
   }

   @GET
   public String hello() {
      return message;
   }
}

这些值是使用模块从.yml配置中选取的,

public class ServerModule implements Module { 
   @Override
   public void configure(Binder binder) {
   }

   @Provides
   @Named("message")
   public String provideMessage(ServerConfiguration serverConfiguration) {
      return serverConfiguration.getMessage();
   }
}

Kindly look at the most recent library