在Play框架中将Scala会话对象转换为Java会话对象

在Play框架中将Scala会话对象转换为Java会话对象,java,scala,playframework,Java,Scala,Playframework,有没有办法将scala中的会话对象转换成java中的会话对象 我有一个用java编写的Model方法,比如: public void DoSomething(Request request, Session session) { String fancyValue = request.getQueryString("userInput"); session.put("Some Fancy Stuff",fancyValue); } 以及用scala编写的控制器方法,

有没有办法将scala中的会话对象转换成java中的会话对象

我有一个用
java
编写的
Model方法,比如:

public void DoSomething(Request request, Session session)
{
       String fancyValue = request.getQueryString("userInput");
       session.put("Some Fancy Stuff",fancyValue);
}
以及用scala编写的
控制器
方法,如:

def showHomePage = Action { implicit request =>

     val JRequest = play.core.j.JavaHelpers.createJavaRequest(request)
     val JSession // conversion needed from request.session to play.mvc.Http.Session

     new SomeModel().DoSomething(JRequest,JSession)

     // would this include the updates done to the session in the java model?
     Ok("Testing Stuff").withSession(session) 
}
如果需要,您将在那里找到一个函数
createJavaContext
。您可以使用它来获取
play.mvc.Http.Context
,从中可以提取
play.mvc.Http.Request
play.mvc.Http.Session

val java_ctx = play.core.j.JavaHelpers.createJavaContext(request)
val java_request = java_ctx.request()
val java_session = java_ctx.session()

这不应该是
Ok(“Testing Stuff”)。如果要在客户端持久化会话,那么使用session(/*updated session*/)
?(在会话cookie中保存太多数据可能不是一个好主意,而是使用服务器端缓存的句柄)。@RichardClose我专注于其他事情,但忘记了,它将编辑并包含该细节,我使用会话只存储一个简单的Id,因此不可能将内容塞进其中,谢谢:)如果我返回Ok(“某个字符串”),对模型中java_会话的更新是否有效。我的控制器中的withSession(会话)?我不确定转换,因为java会话是java HashMap,但是
withSession
方法需要类似Scala映射的东西作为参数(即,
(字符串,字符串)的序列)
tuple。但除了转换之外,是的,它们会。但正如@RichardClose在他的评论中已经提到的,您应该尽量避免在其中放入太多内容。最佳做法是只使用一些令牌(会话id)在会话cookie中,在服务器端执行其余操作。我目前只使用会话来存储Id,我知道play使用cookie在客户端存储会话,并且仅限于4KB。我只需要知道如何转换,以及用java更新会话是否会在scala控制器中保留更新。谢谢:)