Add Kotlin extension for RestTemplate

Issue: SPR-15056
This commit is contained in:
Sebastien Deleuze 2016-12-27 10:08:02 +01:00
parent 3626a1c7f9
commit 546687d5e4
2 changed files with 117 additions and 1 deletions

View File

@ -791,6 +791,7 @@ project("spring-web") {
optional("javax.xml.bind:jaxb-api:${jaxbVersion}")
optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
optional("javax.mail:javax.mail-api:${javamailVersion}")
optional("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
testCompile(project(":spring-context-support")) // for JafMediaTypeFactory
testCompile("io.projectreactor.addons:reactor-test:${reactorCoreVersion}")
testCompile("org.apache.taglibs:taglibs-standard-jstlel:1.2.1") {
@ -807,7 +808,6 @@ project("spring-web") {
testCompile("org.xmlunit:xmlunit-matchers:${xmlunitVersion}")
testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}")
testCompile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
testCompile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
testRuntime("com.sun.mail:javax.mail:${javamailVersion}")
testRuntime("com.sun.xml.bind:jaxb-core:${jaxbVersion}")
testRuntime("com.sun.xml.bind:jaxb-impl:${jaxbVersion}")

View File

@ -0,0 +1,116 @@
package org.springframework.web.client
import org.springframework.http.HttpEntity
import org.springframework.http.HttpMethod
import org.springframework.http.RequestEntity
import java.net.URI
/**
* Extension for [RestOperations] providing [KClass] based API and avoiding specifying
* a class parameter when possible thanks to Kotlin reified type parameters.
*
* @author Jon Schneider
* @author Sebastien Deleuze
* @since 5.0
*/
object RestOperationsExtension {
/**
* @see RestOperations.getForObject
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.getForObject(url: String, vararg uriVariables: Any) =
getForObject(url, T::class.java, *uriVariables)
/**
* @see RestOperations.getForObject
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.getForObject(url: String, uriVariables: Map<String, Any?>) =
getForObject(url, T::class.java, uriVariables)
/**
* @see RestOperations.getForObject
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.getForObject(url: URI) =
getForObject(url, T::class.java)
/**
* @see RestOperations.getForEntity
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.getForEntity(url: String, vararg uriVariables: Any) =
getForEntity(url, T::class.java, *uriVariables)
/**
* @see RestOperations.postForObject
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.postForObject(url: String, request: Any, vararg uriVariables: Any) =
postForObject(url, request, T::class.java, *uriVariables)
/**
* @see RestOperations.postForObject
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.postForObject(url: String, request: Any, uriVariables: Map<String, *>) =
postForObject(url, request, T::class.java, uriVariables)
/**
* @see RestOperations.postForObject
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.postForObject(url: URI, request: Any) =
postForObject(url, request, T::class.java)
/**
* @see RestOperations.postForEntity
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.postForEntity(url: String, request: Any, vararg uriVariables: Any) =
postForEntity(url, request, T::class.java, *uriVariables)
/**
* @see RestOperations.postForEntity
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.postForEntity(url: String, request: Any, uriVariables: Map<String, *>) =
postForEntity(url, request, T::class.java, uriVariables)
/**
* @see RestOperations.postForEntity
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.postForEntity(url: URI, request: Any) =
postForEntity(url, request, T::class.java)
/**
* @see RestOperations.exchange
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, vararg uriVariables: Any) =
exchange(url, method, requestEntity, T::class.java, *uriVariables)
/**
* @see RestOperations.exchange
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, uriVariables: Map<String, *>) =
exchange(url, method, requestEntity, T::class.java, uriVariables)
/**
* @see RestOperations.exchange
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.exchange(url: URI, method: HttpMethod, requestEntity: HttpEntity<*>) =
exchange(url, method, requestEntity, T::class.java)
/**
* @see RestOperations.exchange
*/
@Throws(RestClientException::class)
inline fun <reified T: Any> RestOperations.exchange(requestEntity: RequestEntity<*>) =
exchange(requestEntity, T::class.java)
}