88import java .util .LinkedHashMap ;
99import java .util .List ;
1010import java .util .Map ;
11+ import java .util .Set ;
1112import java .util .TreeMap ;
1213
1314import jooby .internal .BodyWriterImpl ;
@@ -38,8 +39,12 @@ default void send() throws Exception {
3839 void send (Fn otherwise ) throws Exception ;
3940 }
4041
42+ private Request request ;
43+
4144 private BodyConverterSelector selector ;
4245
46+ private Set <RouteInterceptor > interceptors ;
47+
4348 private Charset charset ;
4449
4550 private List <MediaType > produces ;
@@ -51,11 +56,15 @@ default void send() throws Exception {
5156 private Multimap <String , String > headers = Multimaps .newListMultimap (new TreeMap <>(
5257 String .CASE_INSENSITIVE_ORDER ), ArrayList ::new );
5358
54- public Response (final BodyConverterSelector selector ,
59+ public Response (final Request request ,
60+ final BodyConverterSelector selector ,
61+ final Set <RouteInterceptor > interceptors ,
5562 final Charset charset ,
5663 final List <MediaType > produces ,
5764 final ThrowingSupplier <OutputStream > stream ) {
65+ this .request = requireNonNull (request , "A request is required." );
5866 this .selector = requireNonNull (selector , "A message converter selector is required." );
67+ this .interceptors = requireNonNull (interceptors , "Interceptors are required." );
5968 this .charset = requireNonNull (charset , "A charset is required." );
6069 this .produces = requireNonNull (produces , "Produces are required." );
6170 this .stream = requireNonNull (stream , "A stream is required." );
@@ -83,6 +92,11 @@ public void send(final Object message, final BodyConverter converter)
8392 }
8493 requireNonNull (converter , "A converter is required." );
8594
95+ // fire before send
96+ for (RouteInterceptor interceptor : interceptors ) {
97+ interceptor .beforeSend (request , this );
98+ }
99+
86100 // dump headers
87101 headers .entries ().stream ()
88102 .filter (it -> !it .getKey ().startsWith ("@" ))
0 commit comments