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:
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.
Related Documentation
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:
- Follow RESTful design principles
- Include comprehensive error handling
- Provide clear documentation
- Test with various HTTP clients
- Update this documentation when adding new examples