From 6583f9f754c6a57dbb5610b916465a7dc3acf04d Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Fri, 28 Jul 2017 00:22:00 +0200 Subject: [PATCH] Use ParameterizedTypeReference instead of Class in Kotlin extensions This commit also removes WebFlux non-extension functions in favor of regular Kotlin extensions leveraging ParameterizedTypeReference parameter. Issue: SPR-15818 --- .../web/client/RestOperationsExtensions.kt | 9 ++-- .../client/RestOperationsExtensionsTests.kt | 17 +++---- .../function/client/DefaultWebClient.java | 6 +++ .../reactive/function/client/WebClient.java | 13 +++++ .../function/BodyExtractorsExtensions.kt | 26 ---------- .../function/BodyInsertersExtensions.kt | 39 --------------- .../client/ClientResponseExtensions.kt | 25 ++++++---- .../function/client/WebClientExtensions.kt | 21 ++++---- .../server/ServerRequestExtensions.kt | 15 ++++-- .../server/ServerResponseExtensions.kt | 14 +++++- .../function/BodyExtractorsExtensionsTests.kt | 44 ----------------- .../function/BodyInsertersExtensionsTests.kt | 48 ------------------- .../client/ClientResponseExtensionsTests.kt | 17 +++---- .../client/WebClientExtensionsTests.kt | 13 ++--- .../server/ServerRequestExtensionsTests.kt | 9 ++-- .../server/ServerResponseExtensionsTests.kt | 13 ++++- 16 files changed, 118 insertions(+), 211 deletions(-) delete mode 100644 spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt delete mode 100644 spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt delete mode 100644 spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensionsTests.kt delete mode 100644 spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensionsTests.kt diff --git a/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt b/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt index 8bee027689..e7cdb9d66e 100644 --- a/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt +++ b/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt @@ -16,6 +16,7 @@ package org.springframework.web.client +import org.springframework.core.ParameterizedTypeReference import org.springframework.http.HttpEntity import org.springframework.http.HttpMethod import org.springframework.http.RequestEntity @@ -142,7 +143,7 @@ inline fun RestOperations.postForEntity(url: URI, request: Any) */ @Throws(RestClientException::class) inline fun RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, vararg uriVariables: Any): ResponseEntity = - exchange(url, method, requestEntity, T::class.java, *uriVariables) + exchange(url, method, requestEntity, object : ParameterizedTypeReference() {}, *uriVariables) /** * Extension for [RestOperations.exchange] avoiding specifying the type parameter thanks to Kotlin reified type parameters. @@ -153,7 +154,7 @@ inline fun RestOperations.exchange(url: String, method: HttpMet */ @Throws(RestClientException::class) inline fun RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, uriVariables: Map): ResponseEntity = - exchange(url, method, requestEntity, T::class.java, uriVariables) + exchange(url, method, requestEntity, object : ParameterizedTypeReference() {}, uriVariables) /** * Extension for [RestOperations.exchange] avoiding specifying the type parameter thanks to Kotlin reified type parameters. @@ -164,7 +165,7 @@ inline fun RestOperations.exchange(url: String, method: HttpMet */ @Throws(RestClientException::class) inline fun RestOperations.exchange(url: URI, method: HttpMethod, requestEntity: HttpEntity<*>): ResponseEntity = - exchange(url, method, requestEntity, T::class.java) + exchange(url, method, requestEntity, object : ParameterizedTypeReference() {}) /** * Extension for [RestOperations.exchange] avoiding specifying the type parameter thanks to Kotlin reified type parameters. @@ -175,4 +176,4 @@ inline fun RestOperations.exchange(url: URI, method: HttpMethod */ @Throws(RestClientException::class) inline fun RestOperations.exchange(requestEntity: RequestEntity<*>): ResponseEntity = - exchange(requestEntity, T::class.java) + exchange(requestEntity, object : ParameterizedTypeReference() {}) diff --git a/spring-web/src/test/kotlin/org/springframework/web/client/RestOperationsExtensionsTests.kt b/spring-web/src/test/kotlin/org/springframework/web/client/RestOperationsExtensionsTests.kt index 958f37ae1c..3c4476bf9b 100644 --- a/spring-web/src/test/kotlin/org/springframework/web/client/RestOperationsExtensionsTests.kt +++ b/spring-web/src/test/kotlin/org/springframework/web/client/RestOperationsExtensionsTests.kt @@ -23,6 +23,7 @@ import org.mockito.Answers import org.mockito.Mock import org.mockito.Mockito.* import org.mockito.junit.MockitoJUnitRunner +import org.springframework.core.ParameterizedTypeReference import org.springframework.http.HttpEntity import org.springframework.http.HttpMethod import org.springframework.http.RequestEntity @@ -133,8 +134,8 @@ class RestOperationsExtensionsTests { val entity = mock>() val var1 = "var1" val var2 = "var2" - template.exchange(url, method, entity, var1, var2) - verify(template, times(1)).exchange(url, method, entity, Foo::class.java, var1, var2) + template.exchange>(url, method, entity, var1, var2) + verify(template, times(1)).exchange(url, method, entity, object : ParameterizedTypeReference>() {}, var1, var2) } @Test @@ -143,8 +144,8 @@ class RestOperationsExtensionsTests { val method = HttpMethod.GET val entity = mock>() val vars = mapOf(Pair("key1", "value1"), Pair("key2", "value2")) - template.exchange(url, method, entity, vars) - verify(template, times(1)).exchange(url, method, entity, Foo::class.java, vars) + template.exchange>(url, method, entity, vars) + verify(template, times(1)).exchange(url, method, entity, object : ParameterizedTypeReference>() {}, vars) } @Test @@ -152,15 +153,15 @@ class RestOperationsExtensionsTests { val url = "https://spring.io" val method = HttpMethod.GET val entity = mock>() - template.exchange(url, method, entity) - verify(template, times(1)).exchange(url, method, entity, Foo::class.java) + template.exchange>(url, method, entity) + verify(template, times(1)).exchange(url, method, entity, object : ParameterizedTypeReference>() {}) } @Test fun `exchange with reified type parameters, String, HttpEntity`() { val entity = mock>() - template.exchange(entity) - verify(template, times(1)).exchange(entity, Foo::class.java) + template.exchange>(entity) + verify(template, times(1)).exchange(entity, object : ParameterizedTypeReference>() {}) } class Foo diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java index a9484fe027..eed882f9b0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java @@ -294,6 +294,12 @@ class DefaultWebClient implements WebClient { return this; } + @Override + public > RequestHeadersSpec body(P publisher, ParameterizedTypeReference typeReference) { + this.inserter = BodyInserters.fromPublisher(publisher, typeReference); + return this; + } + @Override public > RequestHeadersSpec body(P publisher, Class elementClass) { this.inserter = BodyInserters.fromPublisher(publisher, elementClass); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java index 55818bd948..1c8772dbc0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java @@ -518,6 +518,19 @@ public interface WebClient { */ RequestHeadersSpec body(BodyInserter inserter); + /** + * Set the body of the request to the given asynchronous {@code Publisher}. + *

This method is a convenient shortcut for {@link #body(BodyInserter)} with a + * {@linkplain org.springframework.web.reactive.function.BodyInserters#fromPublisher} + * Publisher body inserter}. + * @param publisher the {@code Publisher} to write to the request + * @param typeReference the type reference of elements contained in the publisher + * @param the type of the elements contained in the publisher + * @param

the type of the {@code Publisher} + * @return this builder + */ + > RequestHeadersSpec body(P publisher, ParameterizedTypeReference typeReference); + /** * Set the body of the request to the given asynchronous {@code Publisher}. *

This method is a convenient shortcut for {@link #body(BodyInserter)} with a diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt deleted file mode 100644 index 5ad43ef129..0000000000 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt +++ /dev/null @@ -1,26 +0,0 @@ -package org.springframework.web.reactive.function - -import org.springframework.http.ReactiveHttpInputMessage -import reactor.core.publisher.Flux -import reactor.core.publisher.Mono - -/** - * Function for providing a `bodyToMono()` alternative to `BodyExtractors.toMono(Foo::class.java)`. - * - * @author Sebastien Deleuze - * @since 5.0 - * @see [KT-11968](https://youtrack.jetbrains.com/issue/KT-11968) - */ -inline fun bodyToMono(): BodyExtractor, ReactiveHttpInputMessage> = - BodyExtractors.toMono(T::class.java) - -/** - * Function for providing a `bodyToFlux()` alternative to `BodyExtractors.toFlux(Foo::class.java)`. - * - * @author Sebastien Deleuze - * @since 5.0 - * @see [KT-11968](https://youtrack.jetbrains.com/issue/KT-11968) - */ -inline fun bodyToFlux(): BodyExtractor, ReactiveHttpInputMessage> = - BodyExtractors.toFlux(T::class.java) - diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt deleted file mode 100644 index fb624760db..0000000000 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.function - -import org.reactivestreams.Publisher -import org.springframework.http.ReactiveHttpOutputMessage -import org.springframework.http.server.reactive.ServerHttpResponse - -/** - * Function for providing a `bodyFromPublisher(publisher)` alternative to `BodyInserters.fromPublisher(publisher, Foo::class.java)`. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -inline fun , reified S : Any> bodyFromPublisher(publisher: T): BodyInserter = - BodyInserters.fromPublisher(publisher, S::class.java) - -/** - * Function for providing a `bodyFromServerSentEvents(publisher)` alternative to `BodyInserters.fromServerSentEvents(publisher, Foo::class.java)`. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -inline fun , reified S : Any> bodyFromServerSentEvents(publisher: T): BodyInserter = - BodyInserters.fromServerSentEvents(publisher, S::class.java) diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt index a0c939ac5f..29bdf36cf1 100644 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt +++ b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt @@ -16,39 +16,48 @@ package org.springframework.web.reactive.function.client +import org.springframework.core.ParameterizedTypeReference import org.springframework.http.ResponseEntity import reactor.core.publisher.Flux import reactor.core.publisher.Mono /** - * Extension for [ClientResponse.bodyToMono] providing a `bodyToMono()` variant. + * Extension for [ClientResponse.bodyToMono] providing a `bodyToMono()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun ClientResponse.bodyToMono(): Mono = bodyToMono(T::class.java) +inline fun ClientResponse.bodyToMono(): Mono = + bodyToMono(object : ParameterizedTypeReference() {}) /** - * Extension for [ClientResponse.bodyToFlux] providing a `bodyToFlux()` variant. + * Extension for [ClientResponse.bodyToFlux] providing a `bodyToFlux()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun ClientResponse.bodyToFlux(): Flux = bodyToFlux(T::class.java) +inline fun ClientResponse.bodyToFlux(): Flux = + bodyToFlux(object : ParameterizedTypeReference() {}) /** - * Extension for [ClientResponse.toEntity] providing a `toEntity()` variant. + * Extension for [ClientResponse.toEntity] providing a `toEntity()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun ClientResponse.toEntity(): Mono> = toEntity(T::class.java) +inline fun ClientResponse.toEntity(): Mono> = + toEntity(object : ParameterizedTypeReference() {}) /** - * Extension for [ClientResponse.toEntityList] providing a `bodyToEntityList()` variant. + * Extension for [ClientResponse.toEntityList] providing a `bodyToEntityList()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun ClientResponse.toEntityList(): Mono>> = toEntityList(T::class.java) +inline fun ClientResponse.toEntityList(): Mono>> = + toEntityList(object : ParameterizedTypeReference() {}) diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt index ff23d7f946..a5197bb1bb 100644 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt +++ b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/client/WebClientExtensions.kt @@ -17,34 +17,39 @@ package org.springframework.web.reactive.function.client import org.reactivestreams.Publisher +import org.springframework.core.ParameterizedTypeReference import reactor.core.publisher.Flux import reactor.core.publisher.Mono /** - * Extension for [WebClient.RequestBodySpec.body] providing a variant without explicit class - * parameter thanks to Kotlin reified type parameters. + * Extension for [WebClient.RequestBodySpec.body] providing a `body() variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") -inline fun > WebClient.RequestBodySpec.body(publisher: S): WebClient.RequestHeadersSpec<*> - = body(publisher, T::class.java) +inline fun > WebClient.RequestBodySpec.body(publisher: S): WebClient.RequestHeadersSpec<*> = + body(publisher, object : ParameterizedTypeReference() {}) /** - * Extension for [WebClient.ResponseSpec.bodyToMono] providing a `bodyToMono()` variant. + * Extension for [WebClient.ResponseSpec.bodyToMono] providing a `bodyToMono()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun WebClient.ResponseSpec.bodyToMono(): Mono = bodyToMono(T::class.java) +inline fun WebClient.ResponseSpec.bodyToMono(): Mono = + bodyToMono(object : ParameterizedTypeReference() {}) /** - * Extension for [WebClient.ResponseSpec.bodyToFlux] providing a `bodyToFlux()` variant. + * Extension for [WebClient.ResponseSpec.bodyToFlux] providing a `bodyToFlux()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun WebClient.ResponseSpec.bodyToFlux(): Flux = bodyToFlux(T::class.java) +inline fun WebClient.ResponseSpec.bodyToFlux(): Flux = + bodyToFlux(object : ParameterizedTypeReference() {}) diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt index 8b267220dc..394a04dc4f 100644 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt +++ b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt @@ -16,22 +16,27 @@ package org.springframework.web.reactive.function.server +import org.springframework.core.ParameterizedTypeReference import reactor.core.publisher.Flux import reactor.core.publisher.Mono /** - * Extension for [ServerRequest.bodyToMono] providing a `bodyToMono()` variant. - * + * Extension for [ServerRequest.bodyToMono] providing a `bodyToMono()` variant + * leveraging Kotlin reified type parameters. + * * @author Sebastien Deleuze * @since 5.0 */ -inline fun ServerRequest.bodyToMono(): Mono = bodyToMono(T::class.java) +inline fun ServerRequest.bodyToMono(): Mono = + bodyToMono(object : ParameterizedTypeReference() {}) /** - * Extension for [ServerRequest.bodyToFlux] providing a `bodyToFlux()` variant. + * Extension for [ServerRequest.bodyToFlux] providing a `bodyToFlux()` variant + * leveraging Kotlin reified type parameters. * * @author Sebastien Deleuze * @since 5.0 */ -inline fun ServerRequest.bodyToFlux(): Flux = bodyToFlux(T::class.java) +inline fun ServerRequest.bodyToFlux(): Flux = + bodyToFlux(object : ParameterizedTypeReference() {}) diff --git a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensions.kt b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensions.kt index 723f79e10d..6f4adc83cd 100644 --- a/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensions.kt +++ b/spring-webflux/src/main/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensions.kt @@ -17,6 +17,8 @@ package org.springframework.web.reactive.function.server import org.reactivestreams.Publisher +import org.springframework.core.ParameterizedTypeReference +import org.springframework.http.MediaType import reactor.core.publisher.Mono /** @@ -25,4 +27,14 @@ import reactor.core.publisher.Mono * @author Sebastien Deleuze * @since 5.0 */ -inline fun ServerResponse.BodyBuilder.body(publisher: Publisher): Mono = body(publisher, T::class.java) \ No newline at end of file +inline fun ServerResponse.BodyBuilder.body(publisher: Publisher): Mono = + body(publisher, object : ParameterizedTypeReference() {}) + +/** + * Extension for [ServerResponse.BodyBuilder.body] providing a `bodyToServerSentEvents(Publisher)` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun ServerResponse.BodyBuilder.bodyToServerSentEvents(publisher: Publisher): Mono = + contentType(MediaType.TEXT_EVENT_STREAM).body(publisher, object : ParameterizedTypeReference() {}) diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensionsTests.kt deleted file mode 100644 index f12d44a0c3..0000000000 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensionsTests.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.function - -import org.junit.Assert.assertNotNull -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.junit.MockitoJUnitRunner - - -/** - * Tests for [BodyExtractors] Kotlin extensions - * - * @author Sebastien Deleuze - */ -@RunWith(MockitoJUnitRunner::class) -class BodyExtractorsExtensionsTests { - - @Test - fun `bodyToMono with reified type parameter`() { - assertNotNull(bodyToMono()) - } - - @Test - fun `bodyToFlux with reified type parameter`() { - assertNotNull(bodyToFlux()) - } - - class Foo -} diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensionsTests.kt deleted file mode 100644 index 99484fa966..0000000000 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensionsTests.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2002-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.reactive.function - -import com.nhaarman.mockito_kotlin.mock -import org.junit.Assert.assertNotNull -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.junit.MockitoJUnitRunner -import org.reactivestreams.Publisher - - -/** - * Tests for [BodyExtractors] Kotlin extensions - * - * @author Sebastien Deleuze - */ -@RunWith(MockitoJUnitRunner::class) -class BodyInsertersExtensionsTests { - - @Test - fun `bodyFromPublisher with reified type parameters`() { - val publisher = mock>() - assertNotNull(bodyFromPublisher(publisher)) - } - - @Test - fun `bodyFromServerSentEvents with reified type parameters`() { - val publisher = mock>() - assertNotNull(bodyFromServerSentEvents(publisher)) - } - - class Foo -} diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensionsTests.kt index ee6f03d2c8..06da9219b8 100644 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensionsTests.kt +++ b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensionsTests.kt @@ -23,6 +23,7 @@ import org.mockito.Mock import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.junit.MockitoJUnitRunner +import org.springframework.core.ParameterizedTypeReference /** * Mock object based tests for [ClientResponse] Kotlin extensions @@ -37,26 +38,26 @@ class ClientResponseExtensionsTests { @Test fun `bodyToMono with reified type parameters`() { - response.bodyToMono() - verify(response, times(1)).bodyToMono(Foo::class.java) + response.bodyToMono>() + verify(response, times(1)).bodyToMono(object : ParameterizedTypeReference>() {}) } @Test fun `bodyToFlux with reified type parameters`() { - response.bodyToFlux() - verify(response, times(1)).bodyToFlux(Foo::class.java) + response.bodyToFlux>() + verify(response, times(1)).bodyToFlux(object : ParameterizedTypeReference>() {}) } @Test fun `toEntity with reified type parameters`() { - response.toEntity() - verify(response, times(1)).toEntity(Foo::class.java) + response.toEntity>() + verify(response, times(1)).toEntity(object : ParameterizedTypeReference>() {}) } @Test fun `ResponseSpec#toEntityList with reified type parameters`() { - response.toEntityList() - verify(response, times(1)).toEntityList(Foo::class.java) + response.toEntityList>() + verify(response, times(1)).toEntityList(object : ParameterizedTypeReference>() {}) } class Foo diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt index e3f3b93f1a..46fb9bcd3d 100644 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt +++ b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/client/WebClientExtensionsTests.kt @@ -25,6 +25,7 @@ import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.junit.MockitoJUnitRunner import org.reactivestreams.Publisher +import org.springframework.core.ParameterizedTypeReference /** * Mock object based tests for [WebClient] Kotlin extensions @@ -43,21 +44,21 @@ class WebClientExtensionsTests { @Test fun `RequestBodySpec#body with Publisher and reified type parameters`() { - val body = mock>() + val body = mock>>() requestBodySpec.body(body) - verify(requestBodySpec, times(1)).body(body, Foo::class.java) + verify(requestBodySpec, times(1)).body(body, object : ParameterizedTypeReference>() {}) } @Test fun `ResponseSpec#bodyToMono with reified type parameters`() { - responseSpec.bodyToMono() - verify(responseSpec, times(1)).bodyToMono(Foo::class.java) + responseSpec.bodyToMono>() + verify(responseSpec, times(1)).bodyToMono(object : ParameterizedTypeReference>() {}) } @Test fun `ResponseSpec#bodyToFlux with reified type parameters`() { - responseSpec.bodyToFlux() - verify(responseSpec, times(1)).bodyToFlux(Foo::class.java) + responseSpec.bodyToFlux>() + verify(responseSpec, times(1)).bodyToFlux(object : ParameterizedTypeReference>() {}) } class Foo diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensionsTests.kt index 069f92f0a4..abef2b3017 100644 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensionsTests.kt +++ b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensionsTests.kt @@ -22,6 +22,7 @@ import org.mockito.Answers import org.mockito.Mock import org.mockito.Mockito.* import org.mockito.junit.MockitoJUnitRunner +import org.springframework.core.ParameterizedTypeReference import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.bodyToFlux import org.springframework.web.reactive.function.server.bodyToMono @@ -39,14 +40,14 @@ class ServerRequestExtensionsTests { @Test fun `bodyToMono with reified type parameters`() { - request.bodyToMono() - verify(request, times(1)).bodyToMono(Foo::class.java) + request.bodyToMono>() + verify(request, times(1)).bodyToMono(object : ParameterizedTypeReference>() {}) } @Test fun `bodyToFlux with reified type parameters`() { - request.bodyToFlux() - verify(request, times(1)).bodyToFlux(Foo::class.java) + request.bodyToFlux>() + verify(request, times(1)).bodyToFlux(object : ParameterizedTypeReference>() {}) } class Foo diff --git a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensionsTests.kt b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensionsTests.kt index b9c3e353b9..be5c8f2f2d 100644 --- a/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensionsTests.kt +++ b/spring-webflux/src/test/kotlin/org/springframework/web/reactive/function/server/ServerResponseExtensionsTests.kt @@ -24,6 +24,8 @@ import org.mockito.Mock import org.mockito.Mockito.* import org.mockito.junit.MockitoJUnitRunner import org.reactivestreams.Publisher +import org.springframework.core.ParameterizedTypeReference +import org.springframework.http.MediaType.* /** * Mock object based tests for [ServerResponse] Kotlin extensions @@ -39,9 +41,16 @@ class ServerResponseExtensionsTests { @Test fun `BodyBuilder#body with Publisher and reified type parameters`() { - val body = mock>() + val body = mock>>() bodyBuilder.body(body) - verify(bodyBuilder, times(1)).body(body, Foo::class.java) + verify(bodyBuilder, times(1)).body(body, object : ParameterizedTypeReference>() {}) + } + + @Test + fun `BodyBuilder#bodyToServerSentEvents with Publisher and reified type parameters`() { + val body = mock>>() + bodyBuilder.bodyToServerSentEvents(body) + verify(bodyBuilder, times(1)).contentType(TEXT_EVENT_STREAM) } class Foo