Skip to main content

juneau-examples-rest

The juneau-examples-rest module provides comprehensive examples demonstrating how to build REST APIs using Apache Juneau's REST server capabilities.

Overview

This module showcases practical examples of building REST services with Juneau, including:

  • REST resource implementation
  • HTTP method handling
  • Request/response serialization
  • Error handling and validation
  • Integration with various data sources

Getting Started

To use the examples in this module, add the following dependencies to your project:

<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-server</artifactId>
<version>${juneau.version}</version>
</dependency>
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-client</artifactId>
<version>${juneau.version}</version>
</dependency>

Example Resources

HelloWorldResource.java

A simple REST resource demonstrating basic HTTP method handling and response serialization.

Features:

  • GET method implementation
  • JSON response serialization
  • Simple POJO return types
  • Basic error handling

RequestEchoResource.java

Shows how to handle incoming requests and echo back request information.

Features:

  • Request object inspection
  • Header and parameter access
  • Request body parsing
  • Response customization

PhotosResource.java

Demonstrates file handling and binary data management in REST APIs.

Features:

  • File upload handling
  • Binary data processing
  • Image metadata extraction
  • File serving capabilities

DTO Bean Examples

AtomFeedResource.java

Shows how to create and serve Atom feeds using Juneau's DTO bean capabilities.

Features:

  • Atom feed generation
  • RSS/Atom standard compliance
  • Dynamic content updates
  • Feed metadata management

JsonSchemaResource.java

Demonstrates JSON Schema generation for API documentation and validation.

Features:

  • Automatic schema generation
  • API documentation
  • Request/response validation
  • Schema customization

Command Pattern Examples

EchoCommand.java

Illustrates the command pattern implementation for REST operations.

Features:

  • Command object design
  • Parameter validation
  • Result processing
  • Error handling

Advanced Features

AdminGuard

Demonstrates security and access control in REST APIs.

Features:

  • Authentication checking
  • Authorization validation
  • Security context handling
  • Access control patterns

UtilityBeansResource.java

Shows how to create utility resources for common operations.

Features:

  • Utility method exposure
  • Common operation patterns
  • Reusable functionality
  • Service composition

HtmlBeansResource.java

Demonstrates HTML generation and web interface creation.

Features:

  • HTML response generation
  • Template-based rendering
  • Web interface creation
  • Form handling

Project Structure

The examples are organized in a clear package structure:

org.apache.juneau.examples.rest/
├── HelloWorldResource.java
├── RequestEchoResource.java
├── PhotosResource.java
├── AdminGuard.java
├── UtilityBeansResource.java
├── HtmlBeansResource.java
├── command/
│ └── EchoCommand.java
└── dto/
├── AtomFeedResource.java
├── JsonSchemaResource.java
└── DtoExamples.java

Configuration Examples

Basic REST Configuration

@Rest(
path="/api",
serializers={JsonSerializer.class, XmlSerializer.class},
parsers={JsonParser.class, XmlParser.class}
)
public class MyResource {
// Resource implementation
}

Advanced Configuration

@Rest(
path="/api/v1",
serializers={JsonSerializer.class, XmlSerializer.class, HtmlSerializer.class},
parsers={JsonParser.class, XmlParser.class, HtmlParser.class},
config={
@RestConfig(name="REST_allowMethodParam", value="true"),
@RestConfig(name="REST_allowHeaderParam", value="true")
}
)
public class AdvancedResource {
// Advanced resource implementation
}

Testing the Examples

Running Individual Examples

Each resource can be tested independently by deploying it to a servlet container or using the embedded Jetty server.

Integration Testing

The module includes integration tests that demonstrate:

  • End-to-end request/response cycles
  • Error scenario handling
  • Performance characteristics
  • Cross-browser compatibility

Best Practices Demonstrated

Resource Design

  • Single responsibility principle
  • Clear method naming
  • Consistent error handling
  • Proper HTTP status codes

Data Handling

  • Input validation
  • Output formatting
  • Error serialization
  • Content type negotiation

Security

  • Authentication patterns
  • Authorization checks
  • Input sanitization
  • Output filtering

Integration with Other Modules

These REST examples integrate with:

juneau-examples-core - Uses core serialization examplesjuneau-petstore - Provides foundation for complete applicationjuneau-microservice - Demonstrates microservice patterns

Deployment Options

Servlet Container

Deploy to any Servlet 3.1+ container:

  • Tomcat
  • Jetty
  • WildFly
  • WebLogic

Spring Boot Integration

Use with Spring Boot for rapid development:

@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

Embedded Server

Run as standalone application with embedded server.

Juneau REST Server Basics - Core REST server conceptsJuneau REST Client Basics - REST client usagejuneau-examples-core - Core serialization examplesjuneau-petstore - Complete application example

Source Code

The complete source code for all REST examples is available in the juneau-examples-rest module of the Apache Juneau project.

Contributing

To contribute new REST examples:

  1. Follow RESTful design principles
  2. Include comprehensive error handling
  3. Provide clear documentation
  4. Test with various HTTP clients
  5. Update this documentation when adding new examples
Discussion

Share feedback or follow-up questions for this page directly through GitHub.