我的问题涉及在动作中创建自定义方法。我使用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调用它?
答案 0 :(得分:0)
您可以根据案例GET
(index
,show
)的任何预定义方法调用自定义方法,请参阅RESTful URL mapping logic。
RESTful URL Mapping Logic
这个Restful动作映射器强制执行Ruby-On-Rails REST样式的映射。 如果未指定方法(通过&#39;!&#39;或&#39;方法:&#39;前缀), 方法是猜测&#34;使用REST样式的约定来检查 URL和HTTP方法。我们特别注意确保这一点 mapper与codebehind插件一起正常工作,以便XML 配置是不必要的。
当然,您可以更改动作映射器使用的方法名称,但它会影响整个应用程序。如果您已经占用了资源URL,那么您应该使用另一个来执行其工作。如果您使用严格的rest
映射器,则会出现这种情况。在mixed mode中,您可以将常规操作映射到某个操作方法。
REST和非RESTful URL的Together Configuration
如果您想在REST旁边继续使用一些非RESTful URL 那些东西,那么你必须提供一个利用的配置 对于地图制作者。
插件包含自己的配置。如果你看看休息 插件jar,你会看到
中struts-plugin.xml
并且你会看到 插件所做的一些配置设置。通常,插件只是 以你想要的方式设置东西。您可能经常需要覆盖 这些设置位于您自己的struts.xml
。
最后,您无法通过!
或method:
前缀指定方法,因为它受默认配置的限制。