RESTful services with Lambda handlers, JPA, Jackson and Bean Validation
import org.rapidoid.annotation.Valid;
import org.rapidoid.jpa.JPA;
import org.rapidoid.setup.App;
import org.rapidoid.setup.On;
public class Main {
    public static void main(String[] args) {
        App.bootstrap(args).jpa(); // bootstrap JPA
        On.get("/books").json(() -> JPA.of(Book.class).all()); // get all books
"/books").json((@Valid Book b) ->; // insert new book if valid
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
public class Book {
    public Long id;
    public String title;
    public int year;

Let's send some HTTP requests and check the results:

POST /books {"title":"Java Book","year":2016}
{"id":1,"title":"Java Book","year":2016}
GET /books
[{"id":1,"title":"Java Book","year":2016}]
POST /books {"year":2004}
{"error":"Validation failed: Book.title (may not be null)","code":422,"status":"Unprocessable Entity"}
GET /books
[{"id":1,"title":"Java Book","year":2016}]

HTTP server routes information:

Verb Path Zone Content type MVC View name Roles
GET /books main json
POST /books main json

Project setup with Maven

To run the example, you need to create a new Java 8 project and configure it properly using Maven:
<project xmlns="" xmlns:xsi=""

Building the project with Maven is easy:
mvn package