@@ -236,7 +236,7 @@ public class RequestParam {
236236
237237 private interface GetValue {
238238
239- Object apply (Request req , Response rsp , RequestParam param ) throws Exception ;
239+ Object apply (Request req , Response rsp , Route . Chain chain , RequestParam param ) throws Exception ;
240240
241241 }
242242
@@ -255,56 +255,60 @@ private interface GetValue {
255255 /**
256256 * Body
257257 */
258- builder .put (bodyType , (req , rsp , param ) -> req .body ().to (param .type ));
258+ builder .put (bodyType , (req , rsp , chain , param ) -> req .body ().to (param .type ));
259259 /**
260260 * Request
261261 */
262- builder .put (TypeLiteral .get (Request .class ), (req , rsp , param ) -> req );
262+ builder .put (TypeLiteral .get (Request .class ), (req , rsp , chain , param ) -> req );
263263 /**
264264 * Route
265265 */
266- builder .put (TypeLiteral .get (Route .class ), (req , rsp , param ) -> req .route ());
266+ builder .put (TypeLiteral .get (Route .class ), (req , rsp , chain , param ) -> req .route ());
267267 /**
268268 * Response
269269 */
270- builder .put (TypeLiteral .get (Response .class ), (req , rsp , param ) -> rsp );
270+ builder .put (TypeLiteral .get (Response .class ), (req , rsp , chain , param ) -> rsp );
271+ /**
272+ * Route.Chain
273+ */
274+ builder .put (TypeLiteral .get (Route .Chain .class ), (req , rsp , chain , param ) -> chain );
271275 /**
272276 * Session
273277 */
274- builder .put (TypeLiteral .get (Session .class ), (req , rsp , param ) -> req .session ());
278+ builder .put (TypeLiteral .get (Session .class ), (req , rsp , chain , param ) -> req .session ());
275279 builder .put (TypeLiteral .get (Types .newParameterizedType (Optional .class , Session .class )),
276- (req , rsp , param ) -> req .ifSession ());
280+ (req , rsp , chain , param ) -> req .ifSession ());
277281
278282 /**
279283 * Files
280284 */
281- builder .put (TypeLiteral .get (Upload .class ), (req , rsp , param ) -> req .file (param .name ));
285+ builder .put (TypeLiteral .get (Upload .class ), (req , rsp , chain , param ) -> req .file (param .name ));
282286 builder .put (TypeLiteral .get (Types .newParameterizedType (Optional .class , Upload .class )),
283- (req , rsp , param ) -> {
287+ (req , rsp , chain , param ) -> {
284288 List <Upload > files = req .files (param .name );
285289 return files .size () == 0 ? Optional .empty () : Optional .of (files .get (0 ));
286290 });
287291 builder .put (TypeLiteral .get (Types .newParameterizedType (List .class , Upload .class )),
288- (req , rsp , param ) -> req .files (param .name ));
292+ (req , rsp , chain , param ) -> req .files (param .name ));
289293
290294 /**
291295 * Cookie
292296 */
293- builder .put (TypeLiteral .get (Cookie .class ), (req , rsp , param ) -> req .cookies ().stream ()
297+ builder .put (TypeLiteral .get (Cookie .class ), (req , rsp , chain , param ) -> req .cookies ().stream ()
294298 .filter (c -> c .name ().equalsIgnoreCase (param .name )).findFirst ().get ());
295- builder .put (TypeLiteral .get (Types .listOf (Cookie .class )), (req , rsp , param ) -> req .cookies ());
299+ builder .put (TypeLiteral .get (Types .listOf (Cookie .class )), (req , rsp , chain , param ) -> req .cookies ());
296300 builder .put (TypeLiteral .get (Types .newParameterizedType (Optional .class , Cookie .class )),
297- (req , rsp , param ) -> req .cookies ().stream ()
301+ (req , rsp , chain , param ) -> req .cookies ().stream ()
298302 .filter (c -> c .name ().equalsIgnoreCase (param .name )).findFirst ());
299303 /**
300304 * Header
301305 */
302- builder .put (headerType , (req , rsp , param ) -> req .header (param .name ).to (param .type ));
306+ builder .put (headerType , (req , rsp , chain , param ) -> req .header (param .name ).to (param .type ));
303307
304308 /**
305309 * Local
306310 */
307- builder .put (localType , (req , rsp , param ) -> {
311+ builder .put (localType , (req , rsp , chain , param ) -> {
308312 if (param .type .getRawType () == Map .class ) {
309313 return req .attributes ();
310314 }
@@ -318,7 +322,7 @@ private interface GetValue {
318322 /**
319323 * Flash
320324 */
321- builder .put (flashType , (req , rsp , param ) -> {
325+ builder .put (flashType , (req , rsp , chain , param ) -> {
322326 Class rawType = param .type .getRawType ();
323327 if (Map .class .isAssignableFrom (rawType )) {
324328 return req .flash ();
@@ -360,8 +364,8 @@ public RequestParam(final AnnotatedElement elem, final String name, final Type t
360364 this .strategy = injector .getOrDefault (strategyType , param ());
361365 }
362366
363- public Object value (final Request req , final Response rsp ) throws Throwable {
364- return strategy .apply (req , rsp , this );
367+ public Object value (final Request req , final Response rsp , final Route . Chain chain ) throws Throwable {
368+ return strategy .apply (req , rsp , chain , this );
365369 }
366370
367371 public static String nameFor (final Parameter param ) {
@@ -387,7 +391,7 @@ private static String findName(final AnnotatedElement elem) {
387391 }
388392
389393 private static final GetValue param () {
390- return (req , rsp , param ) -> {
394+ return (req , rsp , chain , param ) -> {
391395 Mutant mutant = req .param (param .name );
392396 if (mutant .isSet () || param .optional ) {
393397 return mutant .to (param .type );
@@ -400,5 +404,4 @@ private static final GetValue param() {
400404 }
401405 };
402406 }
403-
404407}
0 commit comments