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

How to get String from config.yml file in Dropwizard resource?

我想在我的 Dropwizard config.yml 中获取一个字符串并从资源 class 访问它。

我已将 class 添加到配置

public class DropwizardBackendConfiguration extends Configuration {

  @NotEmpty
  private String uploadFileLocation;

  @JsonProperty
  public String getUploadFileLocation() {
    return uploadFileLocation;
  }

  @JsonProperty
  public void setUploadFileLocation(String uploadFileLocation) {
    this.uploadFileLocation = uploadFileLocation;
  }

}

我能够在 运行 方法中获取内容

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


}

但是我怎样才能在我的资源中得到这个值class。

如果您想在 Jersey 资源中使用完整的 DropwizardBackendConfiguration 或仅 uploadFileLocation,则必须将其作为构造函数参数传递。

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

public HelloWorldResource(String template, String defaultName)

这个 class 的一个实例是 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);
}

使用您的配置和资源做类似的事情 class。

可能会迟到,但你可以通过 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