Resource Classes

This section describes how to define a top-level REST resource page and deploy it in our microservice. The example is a router page that serves as a jumping off page to child resources.

@RestResource( path="/*", title="My Microservice", description="Top-level resources page", htmldoc=@HtmlDoc( navlinks={ "options: servlet:/?method=OPTIONS" } ), children={ HelloWorldResource.class, ConfigResource.class, LogsResource.class } ) public class RootResources extends BasicRestServletJenaGroup { // No code! }

When deployed, it looks like this in a browser:

http://localhost:10000

- The title and description annotations define the titles on the page.
  These can be globalized using $L{...} variables, or by defining specially-named properties in the properties file for the resource.
- In this case, the path annotation defines the context root of your application since it was not specified in the manifest or config file.
  Therefore, this resource is mapped to http://localhost:10000.
- The children annotation make up the list of child resources.
  These child resources can be anything that extends from Servlet, although usually they will be subclasses of {@link oajr.BasicRestServlet} or other resource groups.

If you click the helloWorld link in your application, you'll get a simple hello world message:

http://localhost:10000/helloWorld

...which is generated by this class...

@RestResource( path="/helloWorld", title="Hello World example", description="Simplest possible REST resource" ) public class HelloWorldResource extends BasicRestServlet { @RestMethod(name=GET, path="/*") public String sayHello() { return "Hello world!"; } }

The most-common case for deploying the top-level resource is to use the {@link oaj.microservice.jetty.JettyMicroserviceBuilder#servlet(Class)} method:

public class App { public static void main(String[] args) { JettyMicroservice .create() .args(args) .servlet(RootResources.class) // Our root resource. .build() .start() ; } }

However, there are multiple ways of deploying top-level resources:

- {@link oaj.microservice.jetty.JettyMicroserviceBuilder#servlet(Class)} - Using the builder. Several methods provided.
- {@link oaj.microservice.jetty.JettyMicroservice#addServlet(Servlet,String)} - After the Jetty container has been started.
- As a configuration variable "Jetty/servlets".

  #======================================================================================================================= # Jetty settings #======================================================================================================================= [Jetty] # Subclasses of RestServlet servlets = org.apache.juneau.examples.rest.RootResources

- As a configuration variable "Jetty/servletMap".

  #======================================================================================================================= # Jetty settings #======================================================================================================================= [Jetty] # Any servlets and their path specs servletMap = { '/*': 'org.apache.juneau.examples.rest.RootResources' }

- Directly in the jetty.xml file.

  <Configure id="ExampleServer" class="org.eclipse.jetty.server.Server"> ... <New id="context" class="org.eclipse.jetty.servlet.ServletContextHandler"> <Set name="contextPath">/</Set> <Call name="addServlet"> <Arg>org.apache.juneau.rest.test.Root</Arg> <Arg>/*</Arg> </Call> <Set name="sessionHandler"> <New class="org.eclipse.jetty.server.session.SessionHandler" /> </Set> </New> ...