Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java播放路由传递复杂对象[play framework 2.0]_Java_Playframework 2.0 - Fatal编程技术网

Java播放路由传递复杂对象[play framework 2.0]

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

我已经用Java Play Framework 2.0进行了几周的试验,但现在我正在努力解决以下问题:

如何将Java对象从一个播放模板传递到另一个播放模板

我可以毫无问题地传递简单对象:

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应用程序内存中的常见做法?我确实希望避免必须多次调用数据库才能找到同一个对象,因为数据库可能托管在与应用程序服务器不同的地理位置。谢谢你的帮助!