File tree Expand file tree Collapse file tree 4 files changed +45
-4
lines changed
main/kotlin/org/springframework/web/reactive/function/server
test/kotlin/org/springframework/web/reactive/function/server
main/kotlin/org/springframework/web/servlet/function
test/kotlin/org/springframework/web/servlet/function Expand file tree Collapse file tree 4 files changed +45
-4
lines changed Original file line number Diff line number Diff line change @@ -531,8 +531,8 @@ class CoRouterFunctionDsl internal constructor (private val init: (CoRouterFunct
531
531
fun filter (filterFunction : suspend (ServerRequest , suspend (ServerRequest ) -> ServerResponse ) -> ServerResponse ) {
532
532
builder.filter { serverRequest, handlerFunction ->
533
533
mono(Dispatchers .Unconfined ) {
534
- filterFunction(serverRequest) {
535
- handlerFunction.handle(serverRequest ).awaitFirst()
534
+ filterFunction(serverRequest) { handlerRequest ->
535
+ handlerFunction.handle(handlerRequest ).awaitFirst()
536
536
}
537
537
}
538
538
}
Original file line number Diff line number Diff line change @@ -152,6 +152,16 @@ class CoRouterFunctionDslTests {
152
152
}
153
153
}
154
154
155
+ @Test
156
+ fun filtering () {
157
+ val mockRequest = get(" https://example.com/filter" ).build()
158
+ val request = DefaultServerRequest (MockServerWebExchange .from(mockRequest), emptyList())
159
+ StepVerifier .create(sampleRouter().route(request).flatMap { it.handle(request) })
160
+ .expectNextMatches { response ->
161
+ response.headers().getFirst(" foo" ) == " bar"
162
+ }
163
+ .verifyComplete()
164
+ }
155
165
156
166
private fun sampleRouter () = coRouter {
157
167
(GET (" /foo/" ) or GET (" /foos/" )) { req -> handle(req) }
@@ -186,6 +196,18 @@ class CoRouterFunctionDslTests {
186
196
path(" /baz" , ::handle)
187
197
GET (" /rendering" ) { RenderingResponse .create(" index" ).buildAndAwait() }
188
198
add(otherRouter)
199
+ add(filterRouter)
200
+ }
201
+
202
+ private val filterRouter = coRouter {
203
+ " /filter" { request ->
204
+ ok().header(" foo" , request.headers().firstHeader(" foo" )).buildAndAwait()
205
+ }
206
+
207
+ filter { request, next ->
208
+ val newRequest = ServerRequest .from(request).apply { header(" foo" , " bar" ) }.build()
209
+ next(newRequest)
210
+ }
189
211
}
190
212
191
213
private val otherRouter = router {
Original file line number Diff line number Diff line change @@ -523,8 +523,8 @@ class RouterFunctionDsl internal constructor (private val init: (RouterFunctionD
523
523
*/
524
524
fun filter (filterFunction : (ServerRequest , (ServerRequest ) -> ServerResponse ) -> ServerResponse ) {
525
525
builder.filter { request, next ->
526
- filterFunction(request) {
527
- next.handle(request )
526
+ filterFunction(request) { handlerRequest ->
527
+ next.handle(handlerRequest )
528
528
}
529
529
}
530
530
}
Original file line number Diff line number Diff line change @@ -126,6 +126,13 @@ class RouterFunctionDslTests {
126
126
}
127
127
}
128
128
129
+ @Test
130
+ fun filtering () {
131
+ val servletRequest = MockHttpServletRequest (" GET" , " /filter" )
132
+ val request = DefaultServerRequest (servletRequest, emptyList())
133
+ assertThat(sampleRouter().route(request).get().handle(request).headers().getFirst(" foo" )).isEqualTo(" bar" )
134
+ }
135
+
129
136
private fun sampleRouter () = router {
130
137
(GET (" /foo/" ) or GET (" /foos/" )) { req -> handle(req) }
131
138
" /api" .nest {
@@ -159,6 +166,18 @@ class RouterFunctionDslTests {
159
166
path(" /baz" , ::handle)
160
167
GET (" /rendering" ) { RenderingResponse .create(" index" ).build() }
161
168
add(otherRouter)
169
+ add(filterRouter)
170
+ }
171
+
172
+ private val filterRouter = router {
173
+ " /filter" { request ->
174
+ ok().header(" foo" , request.headers().firstHeader(" foo" )).build()
175
+ }
176
+
177
+ filter { request, next ->
178
+ val newRequest = ServerRequest .from(request).apply { header(" foo" , " bar" ) }.build()
179
+ next(newRequest)
180
+ }
162
181
}
163
182
164
183
private val otherRouter = router {
You can’t perform that action at this time.
0 commit comments