Рестлет Параметры метода ServerResource? - PullRequest
4 голосов
/ 20 октября 2010

Вероятно, это действительно глупый / простой вопрос с таким очевидным ответом, который, кажется, не стоит указывать в документации по рестлету.Где и как (если это вообще возможно) Restlet может передавать параметры методам в классах ServerResource?

Учитывая этот класс:

public class FooServerResource extends ServerResource {
    @Get
    public String foo(String f) {
        return f;
    }
}

и вложение маршрутизатора router.attach("/foo", FooServerResource.class);

Я знаю, что если я использую клиентский соединитель Restlet, я мог бы создать прокси-сервер для этого класса и напрямую вызывать методы, но что, если я делаю вызовы этого ServerResource из какого-то другого не Java-языка, например PHP?

Ответы [ 2 ]

8 голосов
/ 20 октября 2010

Вы можете получить доступ к параметрам запроса, используя ссылку на ресурс.Как правило, что-то вроде этого:

@Get
public String foo() {
    Form queryParams = getReference().getQueryAsForm();
    String f = queryParams.getFirstValue("f");
    return f;
}

Вообще говоря (и это будет работать для других методов, GET), вы можете получить доступ ко всему, что передано в запрос (включая сущность, когда это уместно), используя getRequest() в пределах ServerResource.

1 голос
/ 23 октября 2011

приветВопрос о годовалом возрасте, но я только начал с Рестлета и наткнулся на «ту же» проблему.Я говорю о сервере, а не о клиенте (как отметил Бруно, первоначальный вопрос - это смешивание серверной и клиентской частей)Я думаю, что вопрос не полностью ответил.Например, если вы предпочитаете отделять ресурс Restlet от семантической обработки запроса (отделение бизнес-логики от инфраструктуры), вполне вероятно, что вам потребуются некоторые параметры, такие как Observer, или обратный вызов, или sth.остальное.Итак, как я понял, ни один параметр не может быть передан в этот процесс создания экземпляра.Ресурс создается движком Restlet для каждого запроса.Таким образом, я не нашел способа передать параметр напрямую (есть ли один?)К счастью, к классу ресурсов можно получить доступ к объекту Application движка Restlet, а также к классу, который создает компонент, сервер и т. Д.В классе ресурсов у меня есть что-н.как это

protected Application initObjLinkage(){

    Context cx = this.getContext();
    Client cli = cx.getClientDispatcher();
    Application app = cli.getApplication() ;
    return app;
}

Впоследствии вы можете использовать отражение и интерфейс для доступа к методу в классе Application (все еще в классе ресурсов), отметьте об этом ...

Method cbMethod = app.getClass().getMethod("getFoo", parameterTypes) ;
CallbackIntf getmethodFoo = ( CallbackIntf )cbMethod.invoke( app, arguments );
String str = getmethodFoo()

В моем приложении я использую этот механизм для получения доступа к , который поставляет полученные данные в классы для бизнес-логики.Этот подход является стандартом для всех моих классов ресурсов, который делает их достаточно однородными, стандартизированными и небольшими.Итак ... Я просто надеюсь, что это будет полезно и что {нет / некоторые} способ сделать это гораздо более простым способом:)

...