Autor Hadi Hariri, Edoardo Vacchi, Sébastien Deleuze
Fuente En GitHub

Este tutorial nos guía a través del proceso de creación de un controlador REST simple con Spring Boot

Kotlin funciona sin problemas con Spring Boot y muchos de los pasos que se encuentran en el Guías de primavera para crear un servicio RESTful se puede seguir literalmente para Kotlin. Sin embargo, existen algunas diferencias menores cuando se trata de definir la configuración de Gradle y la estructura de diseño del proyecto, así como el código de inicialización.

En este tutorial, recorreremos los pasos necesarios. Para obtener una explicación más detallada de Spring Boot y Kotlin, consulte Creación de aplicaciones web con Spring Boot y Kotlin.

Tenga en cuenta que todas las clases de este tutorial están en el org.jetbrains.kotlin.demo paquete.

Definiendo el proyecto y las dependencias

En este tutorial, usaremos Gradle, pero se puede lograr lo mismo usando la estructura del proyecto IntelliJ IDEA o Maven. Para obtener detalles sobre cómo configurar Gradle para que funcione con Kotlin, consulte Uso de Gradle.

El archivo Gradle es bastante estándar para Spring Boot. Las únicas diferencias son el diseño de la estructura de las carpetas de origen de Kotlin, las dependencias de Kotlin necesarias y la primavera-kotlin Complemento Gradle (proxies CGLIB utilizados, por ejemplo, para @Configuration y @Bean el procesamiento requiere open clases).

buildscript 
    ext.kotlin_version ='1.4.10'// Required for Kotlin integration
    ext.spring_boot_version ='2.1.0.RELEASE'
    repositories jcenter()
    dependencies 
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"// Required for Kotlin integration
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"// See https://kotlinlang.org/docs/reference/compiler-plugins.html#spring-support
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
	classpath "io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE"

apply plugin:'kotlin'// Required for Kotlin integration
apply plugin:"kotlin-spring"// https://kotlinlang.org/docs/reference/compiler-plugins.html#spring-support
apply plugin:'org.springframework.boot'
apply plugin:'io.spring.dependency-management'

jar 
    baseName ='gs-rest-service'
    version ='0.1.0'

repositories jcenter()

dependencies 
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"// Required for Kotlin integration
    compile "org.springframework.boot:spring-boot-starter-web"testCompile('org.springframework.boot:spring-boot-starter-test')

Creación de una clase de datos de saludo y un controlador

El siguiente paso es crear la clase de datos de saludo que tiene dos propiedades: identificación y un contenido

dataclassGreeting(val id: Long,val content: String)

Ahora definimos el GreetingController que atiende solicitudes del formulario / greeting? name = value y devuelve un objeto JSON que representa una instancia de Saludo

@RestControllerclass GreetingController val counter =AtomicLong()@GetMapping("/greeting")fungreeting(@RequestParam(value ="name", defaultValue ="World") name: String)=Greeting(counter.incrementAndGet(),"Hello, $name")

Como se puede ver, esta es nuevamente una traducción de uno a uno de Java a Kotlin, sin nada especial requerido para Kotlin.

Crear la clase de aplicación

Finalmente, necesitamos definir una clase de aplicación. Como Spring Boot busca un método principal estático público, necesitamos definirlo en Kotlin. Podría hacerse con el @JvmStatic anotación y un objeto complementario, pero aquí preferimos usar una función de nivel superior definida fuera de la clase Application, ya que conduce a un código más conciso y limpio.

No es necesario marcar la clase de aplicación como abierto ya que estamos usando el primavera-kotlin Complemento de Gradle que lo hace automáticamente.

@SpringBootApplicationclass Application

funmain(args: Array<String>)
    SpringApplication.run(Application::class.java,*args)

Ejecutando la aplicación

Ahora podemos usar cualquiera de las tareas estándar de Gradle para Spring Boot para ejecutar la aplicación. Como tal, corriendo

./gradlew bootRun

la aplicación está compilada, los recursos empaquetados y lanzados, lo que nos permite acceder a ella a través del navegador (el puerto predeterminado es 8080)

Aplicación en ejecución