当值保存在播放控制器中时如何在服务层读取会话值

How to read session value in Service layer when the value was saved in Play controller

我正在使用 Play 2.4。我有一个扩展 play.mvc.Controller 的控制器。我在会话中设置用户对象如下:

session("username", user);

现在我想在我的服务 class 中读取这个不扩展 play.mvc.Controller 的会话对象,我不知道如何读取它,所以请协助。

可以使用 Http.Context class:

import play.mvc.Http;

class Service {

    public void something() {
        String username = Http.Context.current().session().get("username");

        // do something
    }
}

但是,你应该吗?下面的层(服务)知道关于上面的层(控制器)的事情是非常不寻常的。根据实例,上面的代码更难测试。为什么不重写它以便您的服务从上面的层接收它需要的东西?

class Service {

    public void something(String username) {
        // do something
    }
}

你的控制器会做:

class MyController extends Controller {

    public Result action() {
        String username = session("username");
        service.something(username);
    }
}