@RestMethod(matchers)

{@link oajr.RestMatcher RestMatchers} are used to allow multiple Java methods to be tied to the same HTTP method and path, but differentiated by some request attribute such as a specific header value.

##### Example:

// GET method that gets invoked for administrators @RestMethod(name=GET, path="/*", matchers=IsAdminMatcher.class) public Object doGetForAdmin() { ... } // GET method that gets invoked for everyone else @RestMethod(name=GET, path="/*") public Object doGetForEveryoneElse() { ... }

The interface for matchers is simple:

public class IsAdminMatcher extends RestMatcher { @Override /* RestMatcher */ public boolean matches(RestRequest req) { return req.isUserInRole("ADMINS_GROUP"); } }

##### Notes:

- If no methods are found with a matching matcher, a 412 Precondition Failed status is returned.
- If multiple matchers are specified on the same method, ONLY ONE matcher needs to match for the method to be invoked.
- Note that you CANNOT define identical paths on different methods UNLESS you use matchers.
  That includes paths that are only different in variable names (e.g. "/foo/{bar}" and "/foo/{baz}").
  If you try to do so, a ServletException will be thrown on startup.
- Methods with matchers take precedence over methods without.
  Otherwise, methods are attempted in the order they appear in the class.

##### See Also:

- {@link oajr.annotation.RestMethod#matchers RestMethod(matchers)}
- {@link oajr.matchers.MultipartFormDataMatcher}
- {@link oajr.matchers.UrlEncodedFormMatcher}