java - Play Framework 2.0 中的路由重载函数

标签 java playframework playframework-2.0

在 Play 中,当重载 Controller 方法时,这些单独的方法不能被多次路由导致编译器不喜欢它。

有没有办法解决这个问题?

假设我的 Product Controller 中有两个函数:getBy(String name)getBy(long id)

对于在 routes 中声明的这些函数,我有两个不同的路由:

GET /p/:id            controllers.Product.getBy(id: Long)
GET /p/:name          controllers.Product.getBy(name: String)

我想对不同的路由使用“相同”的功能,这可能吗?

最佳答案

不,这不可能,有两个解决方案。

首先是使用两个名字:

public static Result getByLong(Long id) {
    return ok("Long value: " + id);
}

public static Result getByString(String name) {
    return ok("String value: " + name);
}

你还应该为它使用单独的路由,否则你会得到类型不匹配

GET   /p-by-long/:id         controllers.Monitor.getByLong(id: Long)
GET   /p-by-string/:name     controllers.Monitor.getByString(name: String)

第二种解决方案是使用一种带有 String 参数的方法并在内部检查它是否可以转换为 Long

public static Result getByArgOfAnyType(String arg) {
    try {
        Long.parseLong(arg);
        return ok("Long: " + arg);
    } catch (Exception e) {
        return ok("String: " + arg);
    }
}

路线:

GET   /p/:arg     controllers.Monitor.getByArgOfAnyType(arg : String)

我知道这不符合您的问题,但至少可以节省您的时间。还要记住,可能有更好的方法来确定 String 是否可以转换为数字类型,即在这个问题中:What's the best way to check to see if a String represents an integer in Java?

关于java - Play Framework 2.0 中的路由重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524047/

相关文章:

java - 如何在 Play Framework 2 (Java) 中有选择地禁用 CSRF 检查

java - 录制视频时显示类似 Whatsapp 的键盘

java - Play 中的 CConvertException!框架

java - 不同的Java Api 使用不同的静态存储?

css - Play Framework 2.0 在 View 中查找当前操作

xml - 如何获得玩!提供 XML 响应的框架

performance - 什么会导致 Intellij 在使用 Scala 时突然变得很慢?

java - 如何处理 Play Framework 中的 session 超时或过期?

java - 如何停止 swt 上的按键事件传播

java - 使用 Spring @Retryable 和 Jackson json 反序列化