2010-10-20 2 views
3

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

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

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

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

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

ответ

8

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

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

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

+0

Хорошо, как передать объект для запроса? – Finbarr

+0

Вы говорите с точки зрения клиента? – Bruno

+0

Если вы говорите о передаче объекта как части запроса, это можно сделать только с помощью POST, а не GET. Объект является объектом контента POST. – Qwerky

1

hi

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

К счастью, к объекту приложения механизма Restlet можно получить доступ из класса ресурсов, а также к классу, который создает компонент, сервер и т. д.

В классе ресурсов у меня есть sth. как этот

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() 

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

Смежные вопросы