Вопрос по java, playframework-2.0, playframework – Маршрутизация перегруженных функций в Play Framework 2.0

3

В Play при перегрузке методов контроллера эти отдельные методы не могут быть маршрутизированы более одного раза, так как компилятору это не нравится.

Есть ли способ обойти это?

Скажи, если бы у меня было две функции в моемProduct контроллер:getBy(String name) а такжеgetBy(long id).

И у меня было два разных маршрута для этих функций, объявленных вroutes:

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

Я хочу использовать "тот же" функция для разных маршрутов, это возможно?

Ваш Ответ

1   ответ
3

First is использовать 2 имени:

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)

Second solution использует один метод с аргументом 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 быть преобразован в числовой тип, то есть в этом вопросе:Какой лучший способ проверить, представляет ли String целое число в Java?

Второе решение достаточно близко для меня. Благодарю. snnth
Почему это не разрешено, хотя?

Похожие вопросы