@@ -100,7 +100,7 @@ public class ViewResolutionResultHandler extends HandlerResultHandlerSupport imp
100
100
101
101
private final List <View > defaultViews = new ArrayList <>(4 );
102
102
103
- private final List <FragmentFormatter > fragmentFormatters = List .of (new SseFragmentFormatter ());
103
+ private final List <StreamHandler > streamHandlers = List .of (new SseStreamHandler ());
104
104
105
105
106
106
/**
@@ -273,10 +273,12 @@ else if (FragmentsRendering.class.isAssignableFrom(clazz)) {
273
273
exchange .getResponse ().setStatusCode (status );
274
274
}
275
275
exchange .getResponse ().getHeaders ().putAll (render .headers ());
276
-
277
276
bindingContext .updateModel (exchange );
278
- Flux <Flux <DataBuffer >> renderFlux = render .fragments ()
279
- .concatMap (fragment -> renderFragment (fragment , locale , bindingContext , exchange ));
277
+
278
+ StreamHandler streamHandler = getStreamHandler (exchange );
279
+
280
+ Flux <Flux <DataBuffer >> renderFlux = render .fragments ().concatMap (fragment ->
281
+ renderFragment (fragment , streamHandler , locale , bindingContext , exchange ));
280
282
281
283
return exchange .getResponse ().writeAndFlushWith (renderFlux );
282
284
}
@@ -331,7 +333,8 @@ private Mono<List<View>> resolveViews(String viewName, Locale locale) {
331
333
}
332
334
333
335
private Mono <Flux <DataBuffer >> renderFragment (
334
- Fragment fragment , Locale locale , BindingContext bindingContext , ServerWebExchange exchange ) {
336
+ Fragment fragment , @ Nullable StreamHandler streamHandler , Locale locale ,
337
+ BindingContext bindingContext , ServerWebExchange exchange ) {
335
338
336
339
// Merge attributes from top-level model
337
340
fragment .mergeAttributes (bindingContext .getModel ());
@@ -343,19 +346,17 @@ private Mono<Flux<DataBuffer>> renderFragment(
343
346
Mono .just (List .of (fragment .view ())) :
344
347
resolveViews (fragment .viewName () != null ? fragment .viewName () : getDefaultViewName (exchange ), locale ));
345
348
346
- FragmentFormatter fragmentFormatter = getFragmentFormatter (exchange );
347
-
348
349
return selectedViews .flatMap (views -> render (views , fragment .model (), bindingContext , mutatedExchange ))
349
- .then (Mono .fromSupplier (() -> (fragmentFormatter != null ?
350
- fragmentFormatter .format (response .getBodyFlux (), fragment , exchange ) :
350
+ .then (Mono .fromSupplier (() -> (streamHandler != null ?
351
+ streamHandler .format (response .getBodyFlux (), fragment , exchange ) :
351
352
response .getBodyFlux ())));
352
353
}
353
354
354
355
@ Nullable
355
- private FragmentFormatter getFragmentFormatter (ServerWebExchange exchange ) {
356
- for (FragmentFormatter formatter : this .fragmentFormatters ) {
357
- if (formatter .supports (exchange .getRequest ())) {
358
- return formatter ;
356
+ private StreamHandler getStreamHandler (ServerWebExchange exchange ) {
357
+ for (StreamHandler handler : this .streamHandlers ) {
358
+ if (handler .supports (exchange .getRequest ())) {
359
+ return handler ;
359
360
}
360
361
}
361
362
return null ;
@@ -460,7 +461,7 @@ public Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends Data
460
461
/**
461
462
* Strategy to render fragment with stream formatting.
462
463
*/
463
- private interface FragmentFormatter {
464
+ private interface StreamHandler {
464
465
465
466
/**
466
467
* Whether the formatter supports the given request.
@@ -469,20 +470,20 @@ private interface FragmentFormatter {
469
470
470
471
/**
471
472
* Format the given fragment.
472
- * @param fragmentBuffers the fragment serialized to data buffers
473
+ * @param fragmentContent the fragment serialized to data buffers
473
474
* @param fragment the fragment being rendered
474
475
* @param exchange the current exchange
475
476
* @return the formatted fragment
476
477
*/
477
- Flux <DataBuffer > format (Flux <DataBuffer > fragmentBuffers , Fragment fragment , ServerWebExchange exchange );
478
+ Flux <DataBuffer > format (Flux <DataBuffer > fragmentContent , Fragment fragment , ServerWebExchange exchange );
478
479
479
480
}
480
481
481
482
482
483
/**
483
484
* Formatter for Server-Sent Events formatting.
484
485
*/
485
- private static class SseFragmentFormatter implements FragmentFormatter {
486
+ private static class SseStreamHandler implements StreamHandler {
486
487
487
488
@ Override
488
489
public boolean supports (ServerHttpRequest request ) {
@@ -492,7 +493,7 @@ public boolean supports(ServerHttpRequest request) {
492
493
493
494
@ Override
494
495
public Flux <DataBuffer > format (
495
- Flux <DataBuffer > fragmentBuffers , Fragment fragment , ServerWebExchange exchange ) {
496
+ Flux <DataBuffer > fragmentContent , Fragment fragment , ServerWebExchange exchange ) {
496
497
497
498
Charset charset = getCharset (exchange .getRequest ());
498
499
DataBufferFactory bufferFactory = exchange .getResponse ().bufferFactory ();
@@ -501,7 +502,7 @@ public Flux<DataBuffer> format(
501
502
502
503
return Flux .concat (
503
504
Flux .just (encodeText (eventLine + "data:" , charset , bufferFactory )),
504
- fragmentBuffers ,
505
+ fragmentContent ,
505
506
Flux .just (encodeText ("\n \n " , charset , bufferFactory )));
506
507
}
507
508
0 commit comments