alwaysCache

Description

Like cache but disregards a Cache-Control request header.

Example

final CachingSettings cachingSettings = CachingSettings.create(system());
// Example keyer for non-authenticated GET requests
final JavaPartialFunction<RequestContext, Uri> simpleKeyer = new JavaPartialFunction<RequestContext, Uri>() {
  public Uri apply(RequestContext in, boolean isCheck) {
    final HttpRequest request = in.getRequest();
    final boolean isGet = request.method() == HttpMethods.GET;
    final boolean isAuthorized = request.getHeader(Authorization.class).isPresent();

    if (isGet && !isAuthorized)
      return request.getUri();
    else
      throw noMatch();
  }
};

final AtomicInteger count = new AtomicInteger(0);
final Route route = alwaysCache(routeCache(cachingSettings), simpleKeyer, () ->
  extractUri(uri ->
    complete(String.format("Request for %s @ count %d", uri, count.incrementAndGet()))
  )
);

// tests:
testRoute(route)
  .run(HttpRequest.GET("/"))
  .assertEntity("Request for http://example.com/ @ count 1");

// now cached
testRoute(route)
  .run(HttpRequest.GET("/"))
  .assertEntity("Request for http://example.com/ @ count 1");

final CacheControl noCache = CacheControl.create(CacheDirectives.NO_CACHE);
testRoute(route)
  .run(HttpRequest.GET("/").addHeader(noCache))
  .assertEntity("Request for http://example.com/ @ count 1");
The source code for this page can be found here.