2

我的问题涉及在操作中创建自定义方法。我正在使用 Struts2 和 REST 插件来实现 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;
}

}

GET我可以通过HTTP 方法正确访问资源。为了使用自定义方法,通过传递参数来调用搜索资源,即

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

正确的程序是什么?如何通过GET以下 URL 调用它?

4

1 回答 1

-1

GET在您的情况下,您可以从( index, )的任何预定义方法调用自定义方法show,请参阅RESTful URL 映射逻辑

RESTful URL 映射逻辑

这个 Restful 动作映射器强制执行 Ruby-On-Rails REST 样式的映射。如果未指定方法(通过 '!' 或 'method:' 前缀),则该方法在使用检查 URL 和 HTTP 方法的 REST 样式约定时被“猜测”。已特别注意确保此映射器与代码隐藏插件一起正常工作,因此不需要 XML 配置。


当然,您可以更改动作映射器使用的方法名称,但这会影响整个应用程序。如果您已经占用了一个资源 URL,那么您应该使用另一个来执行它的工作。这是在您使用严格rest映射器的情况下。在混合模式中,您可以将常用操作映射到某个操作方法。

REST 和非 RESTful URL 的共同配置

如果您想在 REST 内容旁边继续使用一些非 RESTful URL,那么您必须提供用于映射器的配置。

插件包含自己的配置。如果您查看 Rest 插件 jar,您会看到struts-plugin.xml并且在其中您会看到插件所做的一些配置设置。通常,插件只是按照它想要的方式设置东西。您可能经常需要在自己的struts.xml.


!最后,您可能不会通过或前缀指定方法,method:因为它受到默认配置的限制。

于 2014-11-02T19:38:42.190 回答