Как создавать пользовательские методы с помощью плагина Struts2 REST

Моя проблема касается создания пользовательского метода в действии. Я использую Struts2 и REST Plugin для реализации RESTful WebService. Мой класс действий следующий:

public class SampleController implements ModelDriven<Object> {

private Sample sample = new Sample();
private Collection<Sample> list;
private int id;

public HttpHeaders create() {
    sdao.save(sample);
    return new DefaultHttpHeaders("create");
}   


public HttpHeaders destroy() {
    return new DefaultHttpHeaders("destroy");
}

public HttpHeaders show() {
    return new DefaultHttpHeaders("show").disableCaching();
}

public HttpHeaders update() {
    sdao.save(sample);
    return new DefaultHttpHeaders("update");
}

public HttpHeaders index() {
    list = sdao.findAll();
    return new DefaultHttpHeaders("index").disableCaching();
}

public Object getModel() {
    return (list != null ? list : sample);
}


public int getId() {
    return id;
}

public void setId(Integer id) {
    if (id != null) {
        this.sample = (Sample) sdao.findById(id);
    }
    this.id = id;
}

}

Я могу правильно получить доступ к ресурсу через HTTP-метод GET. Чтобы использовать пользовательский метод, вызываемый путем передачи параметра поисковым ресурсам, т.е.

public searchBySenderName(String senderName) {
    list.addAll(sdao.findBySenderName(senderName))
}    

Каковы правильные процедуры? Как я могу вызвать его через GET следующий URL?


person Andrea Secco    schedule 02.11.2014    source источник


Ответы (1)


Вы можете вызвать собственный метод из любого из предопределенных методов для GET (index, show) в вашем случае, см. логика сопоставления URL RESTful .

Логика сопоставления URL-адресов RESTful

Этот сопоставитель действий Restful применяет сопоставления в стиле REST Ruby-On-Rails. Если метод не указан (через префикс '!' или 'method:'), предполагается, что метод использует соглашения в стиле REST, которые проверяют URL-адрес и метод HTTP. Особое внимание было уделено тому, чтобы этот преобразователь правильно работал с подключаемым модулем отделенного кода, поэтому настройка XML не требуется.


Конечно, вы можете изменить имена методов, используемых картографом действий, но это повлияет на все приложение. Если вы уже заняли URL-адрес ресурса, вам следует использовать другой для выполнения своей работы. Это на тот случай, если вы используете строгий rest маппер. В смешанный режим может сопоставить обычное действие с некоторым методом действия.

Совместная конфигурация REST и не-RESTful URL

Если вы хотите продолжать использовать некоторые URL-адреса, не относящиеся к RESTful, вместе с вашим материалом REST, вам нужно будет предоставить конфигурацию, которая использует сопоставления.

Плагины содержат свою собственную конфигурацию. Если вы посмотрите в jar плагина Rest, вы увидите struts-plugin.xml, и в нем вы увидите некоторые настройки конфигурации, сделанные плагином. Часто плагин просто устанавливает вещи так, как хочет. Вам часто может понадобиться переопределить эти настройки в вашем собственном файле struts.xml.


И, наконец, вы не можете указать метод с помощью префикса ! или method:, потому что он ограничен конфигурацией по умолчанию.

person Roman C    schedule 02.11.2014
comment
Спасибо очень любезно. Но как я могу вызвать свой собственный метод? Я не нахожу правильный URL-адрес :-( - person Andrea Secco; 02.11.2014
comment
Вам это не нужно, URL-адрес определяется соглашением, но вам нужен контроллер. - person Roman C; 02.11.2014
comment
Еще раз спасибо. Это остается для меня загадкой. Я реализовал такой метод: public String test() { list = sdao.findBySenderName(raspberrypi-0); возвратный тест; } Но я могу просмотреть результат, передав ресурс id (например, MyProject/sample/24/test.xml). Могу ли я получить наглядный пример? - person Andrea Secco; 04.11.2014
comment
Конечно, загрузите примеры приложений struts2 и ознакомьтесь с демонстрацией struts2-rest-showcase. application — полный WAR-файл, демонстрирующий простую веб-программу REST. - person Roman C; 04.11.2014