Pull to refresh

Простенький бекенд на Kotlin и Spring Boot

image


Предисловие


Здравствуйте, уважаемые читатели. Тема, которую я раскрою была уже неоднократно раскрыта и до меня. Но я думаю, что кому-то это может быть полезно. Мы будем делать простейший бек на Kotlin + Spring Boot + mySql.


Предыстория


Мне задали в институте курсовой проект. Надо было написать клиент-серверное приложение и мой выбор пал на Kotlin и Spring Boot для бека. А как клиент я написал приложение для iOS. Получилось достаточно просто, но были мелочные проблемы в настройке бека.


Для кого это?


Пост предназначен для тех кто хочет использовать Spring Boot вместе с Kotlin и им лень разбираться.


Начало


Для сборки проекта я решил использовать Gradle. Им же я и подтягивал все необходимые мне зависимости. На самом деле зависимостей было не так много — Spring Boot и драйвер для mySql. Больше ничего не потребуется.


Ниже можно увидеть конфигурационный файл для Gradle.


plugins {
    id("org.springframework.boot") version "2.3.0.RELEASE"
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
    kotlin("jvm") version "1.3.72"
    kotlin("plugin.spring") version "1.3.72"
    kotlin("plugin.jpa") version "1.3.61"
}

group = "org.arh.TaxiServiceServer"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    implementation("com.fasterxml.jackson.core:jackson-core:2.11.0")
    implementation("com.fasterxml.jackson.core:jackson-databind:2.11.0")
    implementation("org.json:json:20090211")
    implementation("mysql:mysql-connector-java")
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

Напишем немного кода


После того, как все зависимости были успешно установлены можно и код пописать. Для начала нужно создать класс-контролер для запросов.


После того, как класс будет создан нужно добавить ему нотификацию. Выйдет примерно вот так.


@RestController
@RequestMapping("/entityDelete")
class EntityDeleteController {}

Я делал всё это в Idea. И благодаря встроенной настройке в виде Spring Services можно не создавать класс, из которого будет запускаться приложение. За нас всё сделают сервисы. Важно только объявить то, что контроллер является REST контроллером и указать путь, который контроллер будет его обрабатывать.


Теперь самое интересное — добавим обработчики отдельных запросов.


@RestController
@RequestMapping("/entityPostAddData")
class EntityPostController {

    @PostMapping("/addCall")
    fun addCall(@RequestBody model : CallsModel) {
        val request = model.toSqlInsertRequest()
        DataBaseController().executeUpdate(request)
    }
}

С помощью этого метода можно будет отправлять post запросы на сервер и обрабатывать их. Отправить такой запрос можно по адресу — localhost:8080/entityPostAddData/addCall.


Чтобы сделать метод для get запроса достаточно изменить PostMapping на GetMapping и по аналогии с другими методами.


Параметры метода addCall означает то, что должно придти в теле post запроса. Это не обязательно должен быть какой-либо кастомный класс или структура, это может быть и примитивные классы, такие как String, Int и так далее.


      В теле метода происходит обработка данных.


Заключение


По сути на этом всё. Конечно есть достаточно много различных нотификаций и много другого, но для начала этого более чем достаточно. В основном и используется get и post запросы. Другие запросы используются заметно реже, но по первой же ссылке в гугле можно будет найти информацию.


Я посчитал, что будет достаточно очень короткого гида по созданию такого приложения, здесь можно встретить то, что поможет при старте.


Послесловие


Большое спасибо за прочтение данной статьи. Я понимаю, что это далеко не новая тема, но я подумал, что я смогу внести небольшой вклад и оказать небольшую помощь тому, кто увидит данную статью. Большое спасибо и всего наилучшего!

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.