Java播放路由传递复杂对象[play framework 2.0]
我已经用Java Play Framework 2.0进行了几周的试验,但现在我正在努力解决以下问题: 如何将Java对象从一个播放模板传递到另一个播放模板 我可以毫无问题地传递简单对象:Java播放路由传递复杂对象[play framework 2.0],java,playframework-2.0,Java,Playframework 2.0,我已经用Java Play Framework 2.0进行了几周的试验,但现在我正在努力解决以下问题: 如何将Java对象从一个播放模板传递到另一个播放模板 我可以毫无问题地传递简单对象: GET /Login/:email controllers.Application.login(email:String) 在我的控制器中使用以下代码: public static Result login(String email) { //Do some stuff return
GET /Login/:email controllers.Application.login(email:String)
在我的控制器中使用以下代码:
public static Result login(String email) {
//Do some stuff
return ok("");
}
public static Result test(User user) {
//Do some stuff
return ok("");
}
但我需要能够做到的是:
GET /Test/:user controllers.Application.test(user:User)
在我的控制器中使用以下代码:
public static Result login(String email) {
//Do some stuff
return ok("");
}
public static Result test(User user) {
//Do some stuff
return ok("");
}
当我尝试编译时,出现以下错误:
找不到:键入用户
有人知道我需要做些什么才能让它工作吗?有可能吗?谢谢你的帮助 使用basic不想将“普通”类型写入routes参数是一种干净的方法,不会引起头痛。例如,与其尝试发送整个对象,不如发送其id—最可能是某种数字类型或唯一字符串—例如,如果您的用户模型的id为长类型,您可以简单地执行以下操作:
GET /Test/:userId controllers.Application.test(userId: Long)
控制器
public static Result test(Long userId) {
User user = User.find.byId(userId);
return ok("Now you're watching user: " + user.name);
}
public static Result setAdmin(Long userId, int setTo) {
User user = User.find.byId(userId);
user.isAdmin = (setTo == 1); // of course isAdmin field of User model is type of Boolean
user.update(id);
return ok("User " + user.name + " is " + user.isAdmin);
}
另一个有用的示例是布尔型,使用默认值设置为false的0/1 Int/Int类型更容易传递布尔型:
还是真的
控制器
public static Result test(Long userId) {
User user = User.find.byId(userId);
return ok("Now you're watching user: " + user.name);
}
public static Result setAdmin(Long userId, int setTo) {
User user = User.find.byId(userId);
user.isAdmin = (setTo == 1); // of course isAdmin field of User model is type of Boolean
user.update(id);
return ok("User " + user.name + " is " + user.isAdmin);
}
因此,在模板中,您可以创建一个链接:
<a href='@routes.App.setAdmin(user.id, 1)'>Set as admin</a>
<a href='@routes.App.setAdmin(user.id, 0)'>Set as common user</a>
谢谢你的回答,它真的很有用!由于HTTP是无状态的,是否有将对象以某种方式存储在play应用程序内存中的常见做法?我确实希望避免必须多次调用数据库才能找到同一个对象,因为数据库可能托管在与应用程序服务器不同的地理位置。谢谢你的帮助!