Class RestResource

java.lang.Object
org.apache.juneau.rest.server.servlet.RestResource
Direct Known Subclasses:
AdminResource, BasicRestResource, FaviconResource, StaticFilesResource, VersionResource, ViewResource

public abstract class RestResource extends Object
Identical to RestServlet but doesn't extend from HttpServlet.

This is particularly useful in Spring Boot environments that auto-detect servlets to deploy in servlet containers, but you want this resource to be deployed as a child instead.

See Also:
  • Constructor Details

    • RestResource

      protected RestResource()
      Default constructor.
    • RestResource

      protected RestResource(RestBuilder<?> builder)
      Builder-injection constructor.
      Parameters:
      builder - The programmatic configuration builder. May be null.
  • Method Details

    • getRestBuilder

      Returns the programmatic configuration builder stashed on this resource, or null if none.
      Returns:
      The stashed builder, or null if none was injected.
    • builder

      public static <R extends RestResource> RestResource.DefaultBuilder<R> builder(Class<R> type)
      Creates a new fluent builder for programmatically configuring an instance of the specified resource type.
      Type Parameters:
      R - The resource type.
      Parameters:
      type - The resource type to build. Must not be null.
      Returns:
      A new builder.
    • getRequest

      Returns the current thread-local HTTP request.
      Returns:
      The current thread-local HTTP request, or null if it wasn't created.
    • getResponse

      Returns the current thread-local HTTP response.
      Returns:
      The current thread-local HTTP response, or null if it wasn't created.
    • log

      public void log(Level level, String msg, Object... args)
      Log a message.

      Subclasses can intercept the handling of these messages by overriding doLog(Level, Throwable, Supplier).

      Parameters:
      level - The log level.
      msg - The message to log.
      args - Optional String.format-style arguments.
    • log

      public void log(Level level, Throwable cause, String msg, Object... args)
      Log a message.

      Subclasses can intercept the handling of these messages by overriding doLog(Level, Throwable, Supplier).

      Parameters:
      level - The log level.
      cause - The cause.
      msg - The message to log.
      args - Optional String.format-style arguments.
    • doLog

      protected void doLog(Level level, Throwable cause, Supplier<String> msg)
      Main logger method.

      The default behavior logs a message to the Java logger of the class name.

      Subclasses can override this method to implement their own logger handling.

      Parameters:
      level - The log level.
      cause - Optional throwable.
      msg - The message to log.
    • getContext

      protected RestContext getContext()
      Returns the read-only context object that contains all the configuration information about this resource.
      Returns:
      The context information on this servlet.
    • getPaths

      public Object getPaths()
      Returns the runtime-overridden top-level mount paths for this resource.

      Subclasses can override this method to substitute the @Rest(paths) annotation defaults at construction time. This is the "getter" rung in the runtime-override resolution chain documented on RestContext.getPaths():

      1. Programmatic (RestContext.Builder.paths(String...)) — highest precedence.
      2. This getPaths() getter (when non-null).
      3. @Rest(paths={...}) annotation default (SVL-resolved per element, comma-split) — lowest precedence.
      Accepted return shapes:
      • null — no override; resolution falls through to the @Rest(paths=...) annotation default.
      • String — a single path or a comma-delimited list, e.g. "/healthz,/readyz".
      • String[] — each element may itself be a comma-delimited list.
      • Collection, List, Set, Iterable, or Stream of any of the above (nested mixes are recursively flattened).
      • Primitive arrays (boxed during flattening).

      Non-String leaves are coerced via String.valueOf(Object). Each leaf string then runs through the same per-element pipeline used for @Rest(paths=...) annotation elements: SVL is applied via the bean-store-backed VarResolverSession (so $C{key} consults the live Config, $E{NAME,default} and $S{prop,default} resolve through the bootstrap variable catalog), and the post-SVL value is comma-split with each piece trimmed and empty pieces dropped.

      Notes:
      • Returning null (the default) means "inherit annotation" — the next rung resolves.
      • Returning new String[0], an empty collection, an empty string, or a blank string means "explicitly clear" — no top-level mounts.
      Returns:
      The runtime-overridden mount paths in any accepted shape, or null to inherit the annotation default.
      Since:
      10.0.0
    • setContext

      protected void setContext(RestContext context) throws jakarta.servlet.ServletException
      Sets the context object for this servlet.
      Parameters:
      context - Sets the context object on this servlet.
      Throws:
      jakarta.servlet.ServletException - If error occurred during post-initialiation.