Index: tests/src/net/sourceforge/stripes/controller/RestResolverTests.java
===================================================================
--- tests/src/net/sourceforge/stripes/controller/RestResolverTests.java	(revision )
+++ tests/src/net/sourceforge/stripes/controller/RestResolverTests.java	(revision )
@@ -0,0 +1,100 @@
+package net.sourceforge.stripes.controller;
+
+import net.sourceforge.stripes.StripesTestFixture;
+import net.sourceforge.stripes.action.ActionBean;
+import net.sourceforge.stripes.action.ActionBeanContext;
+import net.sourceforge.stripes.action.Resolution;
+import net.sourceforge.stripes.action.RestBinding;
+import net.sourceforge.stripes.action.UrlBinding;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+@UrlBinding("/RestResolverTests.action")
+public class RestResolverTests implements ActionBean {
+
+    private ActionBeanContext context;
+    private String resolvedRestMethod;
+
+    public ActionBeanContext getContext() { return context; }
+    public void setContext(ActionBeanContext context) { this.context = context; }
+
+    public String getResolvedRestMethod() {
+        return resolvedRestMethod;
+    }
+
+    @RestBinding("GET")
+    public Resolution get() {
+        this.resolvedRestMethod = "Got a Get";
+        return null;
+    }
+
+
+    @RestBinding("PUT")
+    public Resolution put() {
+        resolvedRestMethod = "Got a Put";
+        return null;
+    }
+
+    @RestBinding("POST")
+    public Resolution post() {
+        resolvedRestMethod = "Got a Post";
+        return null;
+    }
+
+    @RestBinding("DELETE")
+    public Resolution delete() {
+        resolvedRestMethod = "Got a Delete";
+        return null;
+    }
+
+    @RestBinding("BAAAAD")
+    public Resolution badRestBinding() {
+        resolvedRestMethod = "Bad Rest Binding";
+        return null;
+    }
+
+    // Start of Test Methods
+
+    @Test(groups="fast")
+    public void testGetResolution() throws Exception {
+        MockRoundtrip trip = new MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
+        trip.getRequest().setMethod("GET");
+        trip.execute();
+
+        RestResolverTests bean = trip.getActionBean( getClass() );
+        Assert.assertEquals(bean.getResolvedRestMethod(), "Got a Get");
+    }
+
+    @Test(groups="fast")
+    public void testPutResolution() throws Exception {
+        MockRoundtrip trip = new MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
+        trip.getRequest().setMethod("PUT");
+        trip.execute();
+
+        RestResolverTests bean = trip.getActionBean( getClass() );
+        Assert.assertEquals(bean.getResolvedRestMethod(), "Got a Put");
+    }
+
+    @Test(groups="fast")
+    public void testPostResolution() throws Exception {
+        MockRoundtrip trip = new MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
+        trip.getRequest().setMethod("POST");
+        trip.execute();
+
+        RestResolverTests bean = trip.getActionBean( getClass() );
+        Assert.assertEquals(bean.getResolvedRestMethod(), "Got a Post");
+    }
+
+    @Test(groups="fast")
+    public void testDeleteResolution() throws Exception {
+        MockRoundtrip trip = new MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
+        trip.getRequest().setMethod("DELETE");
+        trip.execute();
+
+        RestResolverTests bean = trip.getActionBean( getClass() );
+        Assert.assertEquals(bean.getResolvedRestMethod(), "Got a Delete");
+    }
+
+}
+
Index: stripes/src/net/sourceforge/stripes/action/RestBinding.java
===================================================================
--- stripes/src/net/sourceforge/stripes/action/RestBinding.java	(revision )
+++ stripes/src/net/sourceforge/stripes/action/RestBinding.java	(revision )
@@ -0,0 +1,14 @@
+package net.sourceforge.stripes.action;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+public @interface RestBinding {
+
+    /** The HTTP method to bind to. */
+    String value();
+}
Index: stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java
===================================================================
--- stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java	(revision 1281)
+++ stripes/src/net/sourceforge/stripes/controller/AnnotatedClassActionResolver.java	(revision )
@@ -18,6 +18,7 @@
 import net.sourceforge.stripes.action.ActionBeanContext;
 import net.sourceforge.stripes.action.DefaultHandler;
 import net.sourceforge.stripes.action.HandlesEvent;
+import net.sourceforge.stripes.action.RestBinding;
 import net.sourceforge.stripes.action.SessionScope;
 import net.sourceforge.stripes.config.BootstrapPropertyResolver;
 import net.sourceforge.stripes.config.Configuration;
@@ -78,6 +79,9 @@
     /** Key used to store the default handler in the Map of handler methods. */
     private static final String DEFAULT_HANDLER_KEY = "__default_handler";
 
+    /** Key used to store the handler in the Map of handler methods for RestBindings. */
+    private static final String REST_HANDLER_KEY_PREFIX = "__rest_handler_";
+
     /** Log instance for use within in this class. */
     private static final Log log = Log.getInstance(AnnotatedClassActionResolver.class);
 
@@ -252,11 +256,40 @@
                     // Makes sure we catch the default handler
                     classMappings.put(DEFAULT_HANDLER_KEY, method);
                 }
+
+                //Add mappings for REST style HTTP methods
+                RestBinding restBinding = method.getAnnotation(RestBinding.class);
+                if(restBinding != null) {
+                    String httpMethod = restBinding.value();
+                    if (isValidRestMethod(httpMethod)) {
+                        String restHandlerKey = REST_HANDLER_KEY_PREFIX + httpMethod;
+                        classMappings.put(restHandlerKey, method);
-            }
+                    }
+                    else {
+                        log.error("The ActionBean " + clazz
+                            + " declares an invalid REST Method '" + httpMethod + "' in a RestBinding annotation");
-        }
-    }
+                    }
+                }
+            }
+        }
+    }
 
     /**
+     * Determines if the string passed in is a valid REST HTTP Method.
+     * See VALID_REST_METHODS for the list of Valid REST Methods
+     * @param method the HTTP method string
+     * @return true if it is a valid method
+     */
+    protected boolean isValidRestMethod(String method) {
+        for(String s : VALID_REST_METHODS) {
+            if(s.equals(method)) return true;
+        }
+        return false;
+    }
+    public static final String[] VALID_REST_METHODS = new String[]{"GET","PUT","POST","DELETE"};
+
+
+    /**
      * Responsible for determining the name of the event handled by this method, if indeed
      * it handles one at all.  By default looks for the HandlesEvent annotations and returns
      * it's value if present.
@@ -477,11 +510,24 @@
     public String getEventName(Class<? extends ActionBean> bean, ActionBeanContext context) {
         String event = getEventNameFromRequestAttribute(bean, context);
         if (event == null) event = getEventNameFromEventNameParam(bean, context);
+        if (event == null) event = getEventNameFromRestMethod(bean, context);
         if (event == null) event = getEventNameFromRequestParams(bean, context);
         if (event == null) event = getEventNameFromPath(bean, context);
         return event;
     }
 
+    private String getEventNameFromRestMethod(final Class<? extends ActionBean> bean,
+                                              final ActionBeanContext context) {
+        Map<String,Method> handlers = this.eventMappings.get(bean);
+
+        String method = context.getRequest().getMethod();
+        String restHandlerKey = REST_HANDLER_KEY_PREFIX + method;
+        Method handler = handlers.get(restHandlerKey);
+        if (handler != null) return restHandlerKey;
+
+        return null;
+    }
+
     /**
      * Checks a special request attribute to get the event name. This attribute
      * may be set when the presence of the original request parameters on a
