【问题标题】:What is the alternative for Play.application()Play.application() 的替代方法是什么
【发布时间】:2016-08-23 12:19:38
【问题描述】:

我是 Play 框架的新手。我想读取 conf 文件夹中的文件。所以我用

Play.application().classloader().getResources("Data.json").nextElement().getFile()

但我知道 play.Play 现在已被弃用。我可以用什么来读取文件。 我读了this 的文章,几乎看不懂它在说什么。

【问题讨论】:

  • 您使用的是哪个版本?您已使用 v2.3 标记帖子,但 play.Play 在 2.5 中已弃用
  • @Nio 非常感谢你。我纠正了它。我正在使用 2.5

标签: java playframework playframework-2.5


【解决方案1】:

只需将应用程序注入您需要的类中。假设它在控制器中:

import play.Application;
import javax.inject.Inject;
import javax.inject.Provider;

class YourController extends Controller {

    @Inject
    Provider<Application> app;


    public Result someMethod() {
        // (...)
        // File is placed in conf/Data.json
        InputStrem is = app.get().classloader().getResourceAsStream("Data.json");
        String json = new BufferedReader(new InputStreamReader(is))
                .lines().collect(Collectors.joining("\n")); 
        return ok(json).as("application/json");    
    }
}

【讨论】:

  • 它工作正常。我想我必须了解依赖注入才能知道实际发生了什么。
  • 谁能告诉我找到这种解决方案的正确路径。因为一遍又一遍地阅读文档对我没有帮助。
【解决方案2】:

您阅读的 2.5 迁移文章重点介绍了 Play 从全局状态迁移到依赖注入作为连接依赖的一种手段 - 因此删除了那些静态方法。如果您还没有真正理解这一点,请不要担心。

假设此配置条目(在 application.conf 或导入到 application.conf 的另一个文件中:-

my_conf_key = "some value"

这是一个使用 2.5 查找配置属性的示例:-

import play.api._
import play.api.mvc._
import javax.inject.Inject

class TestConf @Inject() (conf: Configuration) extends Controller {

  def config = Action {
    Ok(conf.underlying.getString("my_conf_key"))
  }

}

打印:-

some value

【讨论】:

  • 你是说我必须将我的数据添加到配置文件中?
【解决方案3】:

Salem 为您提供了一个特定用例的示例。在post 中,您可以在 Play 中找到有关依赖注入的更详细说明。

这个post 是关于迁移到 Play 2.5 的。

希望对你有帮助。

【讨论】:

    【解决方案4】:

    注入Application没有用,所以我不得不注入Environment然后调用environment.resource("resource.xsd");

    例子:

    import javax.inject.Inject;
    
    public class ExampleResource extends Controller{
    
         private final Environment environment;
    
         @Inject
         public ExampleResource(Environment environment){
              this.environment = environment;
         }
    
         public void readResourceAsStream() {
              InputStream resource = environment.resourceAsStream("data.xsd");
              // Do what you want with the stream here
         }
    
         public void readResource(){
              URL resource = environment.resource("data.xsd");
         }
    }
    

    播放有关应用程序接口的文档: https://www.playframework.com/documentation/2.6.9/api/java/play/Application.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-13
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多