I have a simple scenario: automatically add a response header to every HTTP response; and I want to do this in Java.
Looking at src/play-filters-helpers/src/ma
There isn't a nice Java API available for creating Play Filters. However, you can adapt the existing Scala APIs into a nice Java template.
For example:
import play.api.mvc.*;
import scala.Function1;
import scala.concurrent.Future;
import scala.runtime.AbstractFunction1;
public abstract class JavaFilter implements Filter {
@Override
public Future apply(Function1> nextFilter, RequestHeader requestHeader) {
return nextFilter
.apply(requestHeader)
.map(new AbstractFunction1() {
@Override
public Result apply(Result currentResult) {
return Apply(currentResult, requestHeader);
}
},
play.api.libs.concurrent.Execution.defaultContext());
}
@Override
public EssentialAction apply(EssentialAction next) {
return Filter$class.apply(this, next);
}
public abstract Result Apply(Result currentResult, RequestHeader requestHeader);
}
Example implementation:
import play.api.mvc.RequestHeader;
import play.api.mvc.Result;
public class HelloFilter extends JavaFilter {
@Override
public Result Apply(Result currentResult, RequestHeader requestHeader) {
if (requestHeader.headers().get("X-Filter").isDefined()) {
ResultAdapter resultAdapter = new ResultAdapter(currentResult);
return resultAdapter.WithHeader("X-Hello", "World!");
}
return currentResult;
}
}
For a further explanation of how this works, see my blog post about it here