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



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

如何将Java对象从一个Play模板传递到另一个模板?

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

GET /Login/:email   controllers.Application.login(email:String)

在我的控制器中有以下代码:

public static Result login(String email) {
    //Do some stuff
    return ok("");
}

但我需要的是这样的东西:

GET /Test/:user   controllers.Application.test(user:User)

在我的控制器中有以下代码:

public static Result test(User user) {
    //Do some stuff
    return ok("");
}

当我尝试编译时,我得到以下错误:

找不到:键入用户

有人知道我需要做什么才能让它发挥作用吗?这可能吗?感谢您的帮助!

使用基本(不想写"普通")类型作为routes params是一种干净的方法,不会引起头痛。对于一个尝试发送整个对象的示例,最好发送它的id-很可能是某种数字类型或唯一的String。例如,如果您的用户模型具有Long类型的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);
}

其他有用的示例是布尔值,它更容易使用0/1 Int/int类型(默认值设置为false):

GET /set-admin/:userId    controllers.App.setAdmin(userId: Long, setTo: Int ?= 0)

true

GET /set-admin/:userId    controllers.App.setAdmin(userId: Long, setTo: Int ?= 1)

控制器

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>

最新更新