gpt4 book ai didi

Java play路由传递复杂对象【Play框架2.0】

转载 作者:行者123 更新时间:2023-12-01 05:09:58 26 4
gpt4 key购买 nike

我已经尝试 Java Play Framework 2.0 几个星期了,但现在我遇到了以下问题:

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

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

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

在我的 Controller 中使用以下代码:

public static Result login(String email) {

//Do some stuff

return ok("");
}

但是我需要能够做到的是这样的:

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

在我的 Controller 中使用以下代码:

public static Result test(User user) {

//Do some stuff

return ok("");
}

当我尝试编译时,出现以下错误:

not found: type User

有人知道我需要做什么才能使其正常工作吗?有可能吗?感谢任何帮助!

最佳答案

使用基本(不想写“普通”)类型为 routes params这是一种干净的方法,不会引起头痛。例如,与其尝试发送整个对象,不如发送其 id - 最有可能是某种数字类型或唯一的 String例如,如果您的用户模型有 idLong输入你可以简单地做到这一点:

GET /Test/:userId   controllers.Application.test(userId: Long)

Controller

public static Result test(Long userId) {
User user = User.find.byId(userId);
return ok("Now you're watching user: " + user.name);
}

其他有用的示例是 boolean 值,而不是传递它,它只是更容易使用 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)

Controller

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>

关于Java play路由传递复杂对象【Play框架2.0】,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com