VERB PATH CONTROLLER_METHOD GET / controllers.Application.index() GET /foo controllers.Application.foo()
Declarative, type-safe URL Mapping
public static Result index() {
  return ok("Hello World!");
}
import play.libs.F.*;
private static Integer calc() {
    return (5134 * 5789) / 349;
}
public static Promise<Result> basicPromise() { 
  Promise<Integer> promise = Promise.promise(() -> calc()); 
  return promise.map(i -> ok("Result is: " + i));
}
public static Promise<Result> getPage() { 
  final Promise<WSResponse> promise = 
    WS.url("http://google.com").get();
  return promise.map(response -> ok(response.getBody()));
}
- Fully async and non-blocking
- Client to Server, Server to Servicepublic static Promise<Result> composition() { 
  final Promise<WSResponse> googlePromise = 
    WS.url("http://google.com").get();
  final Promise<WSResponse> twitterPromise = 
    WS.url("http://twitter.com").get();
  return googlePromise.flatMap(google ->
    twitterPromise.map(twitter ->
      ok(google.getBody() + twitter.getBody())));
}
- Three requests, two in parallel (depending on thread availability)
- All async & non-blockingAkka decouples communication from failure handling: