272. Adapting request/exchange
Adapting a request can be useful for testing and debugging purposes. Practically, we can adapt the request (com.sun.net.httpserver.Request) before the handler sees it, so we can modify the initial request and pass the result to the handler. For this, we can rely on the pre-processing Filter.adaptRequest(String description, UnaryOperator<Request> requestOperator) method. Besides the description, this method gets the effective request state of the exchange as UnaryOperator<Request>.
Here is an example that adds to each request the header Author next to a post-processing filter that logs the request details to the console:
HttpHandler fileHandler = ...;
Filter preFilter = Filter.adaptRequest(
"Add 'Author' header", r -> r.with(
"Author", List.of("Anghel Leonard")));
Filter postFilter = SimpleFileServer.createOutputFilter(
out, SimpleFileServer.OutputLevel.VERBOSE);
HttpServer sws = HttpServer...