Non C'è una bella Java API disponibili per la creazione di Giocare con i filtri. Tuttavia, è possibile adattare le API Scala esistenti in un buon modello Java.
Ad esempio: realizzazione
import play.api.mvc.*;
import scala.Function1;
import scala.concurrent.Future;
import scala.runtime.AbstractFunction1;
public abstract class JavaFilter implements Filter {
@Override
public Future<Result> apply(Function1<RequestHeader, Future<Result>> nextFilter, RequestHeader requestHeader) {
return nextFilter
.apply(requestHeader)
.map(new AbstractFunction1<Result, Result>() {
@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);
}
Esempio:
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;
}
}
Per un'ulteriore spiegazione di come funziona, vedere il mio blog post su di esso here
Questo ha funzionato perfettamente, anche se ho avuto rimuovere il mio Global.java, che ha finito per apparire come: 'object Global estende WithFilters (AddResponseHeader, new GzipFilter())' –
C'è qualche possibilità che può essere aggiunto a 'Global.java'? –
Inserito un modo per farlo nella risposta. –