Kotlin для web разработки: Как начать использовать Kotlin для WEB? — Хабр Q&A

Kotlin для начинающих. Kotlin и веб-разработка — Блог

Kotlin для начинающих. Kotlin и веб-разработка

25 мая 2022

0

Romo Fedoroff

Одна из ключевых особенностей языка Kotlin — значительное сокращение шаблонного кода (boilerplate code). Если, к примеру при создании простого класса в Java мы явно объявляем поля, конструктор и геттеры этого класса, то в Kotlin все намного проще. Рассмотрим класс, который обозначает абстрактного Клиента. Класс имеет следующие поля: Name, Email и Company. Вот как выглядит код, написанный на языке Java:

public class Customer{
	String name;
	String email;
	String company;
	
	//constructor to initialise fields
	public Customer(String name, String email, String company) {
		this.name = name;
		this.email = email;
		this.company = company;
	}
	 
	//getter method for name
	public String getName() {
		return name;
	}
	 
	//getter method for email
	public String getEmail() {
		return email;
	}
	 
	//getter method for company
	public String getCompany() {
		return company;
	}
}

А теперь посмотрим на этот же класс в Kotlin:

class Customer(val name: String, val email: String, val company: String)

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

Нулевые ссылки (null references) являются наиболее распространенной причиной исключений (exception) в приложениях на Java. Нам всем знакомо досадное исключение NullPointerException (NPE). Держа в уме эту проблему, разработчики Kotlin сделали многое, чтобы ее решить.

В Kotlin по умолчанию переменной не может быть присвоено нулевое значение — это первая линия защиты от NPE. Используя оператор nullable ‘?’, переменная может получить нулевое значение, но для доступа к атрибутам переменной необходимо использовать оператор null-safety ‘?’. Если переменная имеет нулевое значение, она будет рассматриваться как строка. Единственный способ получить NPE в Kotlin — использовать оператор not-null ‘!!’, который вызовет исключение KotlinNullPointerException.

Вот несколько примеров:

//Нулевая ссылка
var a: String = "abc" 
a = null //ошибка компиляции 
//вывод: Null cannot be a value of a non-null type String 
//Оператор nullable ? 
var a: String? = "abc" 
a = null //ok 
print(a) 
//вывод: null 
  
var a: String? = "abc" 
a = null //ok 
print(a. length) //ошибка компиляции 
//вывод: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String? 
  
//Оператор null-safety ?. 
var a: String? = "abc" 
a = null  
print(a?.length) //ok 
//вывод: null 
  
//Оператор not-null !! 
var a: String? = "abc" 
a = null  
print(a!!.length)  
/*вывод: Exception in thread "main" kotlin.KotlinNullPointerException 
at …………
*/

И Java, и Kotlin компилируются в один и тот же байткод. Благодаря этому возможна функциональная совместимость. Это означает, что Kotlin может вызывать и выполнять код Java. Интероперабельность Kotlin делает его совместимым с существующими библиотеками JVM, Android и браузерами.

Spring официально поддерживает Kotlin, начиная со Spring Framework 5.0. Интересной особенностью является то, что разработчики Spring пытаются сделать свой фреймворк null-safe в части, поддерживающей Kotlin, и стремятся позволить разработчикам исправлять ошибки с нулевыми значениями еще на этапе компиляции и не допускать NullPointerExceptions, которые могут возникнуть во время выполнения.

Для того, чтобы начать разрабатывать в связке Spring + Kotlin, рекомендуется зайти на сайт https://start.spring.io. На этом сайте можно инициализировать новый проект Spring. Важно при этом выбрать язык Kotlin. Также необходимо выбрать инструмент сборки проекта. Доступны два инструмента — Gradle и Maven. Обычно для проектов на Kotlin рекомендуется использовать Gradle, так как он хорошо поддерживает Kotlin DSL — язык по умолчанию при генерации проекта с Kotlin. Однако можно использовать и Maven, если он вам более удобен.

Пример реализации контроллера на Kotlin

Часто веб-приложения построены по архитектуре, в которой применяется понятие Контроллера (например Model-View-Controller, MVC).

Давайте рассмотрим, как можно реализовать типовой контроллер в связке Spring + Kotlin.

Предположим, мы создали простенькую view (blog.html):

<html>
  <head></head>
    <body>
        <h2>{{title}}</h2>
     </body>
</html>

Теперь напишем работающий с этой view контроллер:

import org. springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.ui.set
import org.springframework.web.bind.annotation.GetMapping
@Controller
class HtmlController {
  @GetMapping("/blog")
  fun showBlogSite(model: Model): String {
    model["title"] = "Blog"
    return "blog"
  }
}

И так, когда мы попытаемся получить доступ к пути /blog с помощью GET-запроса, сработает наш контроллер. Сначала он добавит атрибут title со значением «Blog» к модели, а затем возвратит нашу view «blog.html», заполненную в согласии с этой моделью.

Бывает, что вместо того, чтобы возвратить view целиком или частично, необходимо просто вернуть сериализованные данные. В таком случае используется REST-контроллер. Рассмотрим пример:

@RestController
@RequestMapping("/api/article")
class ArticleController(private val repository: ArticleRepository) {
  @GetMapping("/")
  fun findAll() = repository.findAllByOrderByAddedAtDesc()
  @GetMapping("/{id}")
  fun findOne(@PathVariable id: UUID) =
      repository. findById(id) ?: ResponseStatusException(HttpStatus.NOT_FOUND, "This article does not exist")
}

В этом примере, мы создали контроллер «ArticleController». Контроллер взаимодействует с репозиторием данных «ArticleRepository» (доступ передается через конструктор контроллера).

Репозиторий напрямую связан с хранилищем данных (это может быть, например реляционная база данных или NoSQL источник). Если мы попытаемся получить доступ к пути «/» с помощью GET запроса, контроллер возвратит нам из репозитория все объекты типа «Article», упорядоченные по дате добавления в порядке убывания. Так как мы явно не указали тип возвращаемых данных, метод «findAll» возвратит данные из репозитория, в том виде (и того типа) в котором они там хранятся.

Во второй конечной точке (endpoint) с адресом «GET /{id}», используется elvis-оператор «?:». Это означает что, если метод репозитория «findById» возвратит значение null, контроллер выбросит исключение типа «ReponseStatusException», иначе – будет возвращен найденный по «id» объект. В языке Java отсутствует оператор elvis, поэтому, для реализации того же функционала, в нем порою приходится писать существенно больший объем кода.

Для тестирования кода рекомендуется использовать @MockMvcTest и библиотеку SpringMockK, которая похожа на Mockito, но лучше подходит для Kotlin:

@MockMvcTest
class HttpControllersTests(@Autowired val mockMvc: MockMvc) {
  @MockkBean
  private lateinit var articleRepository: ArticleRepository
  @Test
  fun `List articles`() {
    val user = User("testUser", "John", "Doe")
    val spring5Article = Article("Spring Framework 5.0 goes GA", "Dear Spring community ...", "Lorem ipsum", user)
    val spring43Article = Article("Spring Framework 4.3 goes GA", "Dear Spring community ...", "Lorem ipsum", user)
    every { articleRepository.findAllByOrderByAddedAtDesc() } returns listOf(spring5Article, spring43Article)
    mockMvc.perform(get("/api/article/").accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk)
        .andExpect(content(). contentType(MediaType.APPLICATION_JSON_UTF8))
        .andExpect(jsonPath("\$.[0].author.login").value(user.login))
        .andExpect(jsonPath("\$.[0].slug").value(spring5Article.slug))
        .andExpect(jsonPath("\$.[1].author.login").value(user.login))
        .andExpect(jsonPath("\$.[1].slug").value(spring43Article.slug))
  }
}

В примере выше мы создали одного тестового пользователя и два сымитированных объекта вида «Статья» (mocked Article entities). Затем задали, что для каждого (every) запроса репозитория на поиск всех «статей» должен возвращаться список (list) из этих сымитированных статей. Дальше с помощью MockMVC мы составили имитирующий (mocked) HTTP-запрос. Мы указали MockMVC выполнить GET-запрос на ‘/api/article’ и ожидать содержимое в формате JSON. Тест будет считаться пройденным, если полученный на сымитированный вызов ответ будет «OK», содержимое будет в формате JSON, и в нем будут содержаться данные наших сымитированные «статей», такие как: логин автора и название статьи.

 

Конец статьи

==============================================================

Данная статья является отредактированным переводом статьи «Kotlin in Web Development» автора Kristijan Zdelarec.

Kotlin для серверов — Kotlin


Kotlin отлично подходит для разработки серверных приложений. Kotlin позволяет вам писать лаконичный и выразительный код,
сохраняя при этом полную совместимость с существующими стеками технологий на базе Java, и все это с плавной кривой
обучения:

  • Выразительность: инновационные возможности Kotlin, такие как поддержка
    типобезопасных строителей и делегированных свойств, помогают
    создавать мощные и простые в использовании абстракции.
  • Масштабируемость: поддержка корутинов помогает создавать серверные приложения,
    масштабируемые для большого числа клиентов со скромными требованиями к оборудованию.
  • Совместимость: Kotlin полностью совместим со всеми фреймворками на базе Java, поэтому вы можете использовать свой
    привычный стек технологий, одновременно пользуясь преимуществами более современного языка.
  • Миграция: Kotlin поддерживает постепенную миграцию больших кодовых баз с Java на Kotlin. Вы можете начать писать
    новый код на Kotlin, сохраняя при этом старые части вашей системы на Java.
  • Инструментарий: В дополнение к отличной поддержке IDE в целом, Kotlin предлагает инструментарий для конкретной
    платформы (например, для Spring) в плагине для IntelliJ IDEA Ultimate.
  • Кривая обучения: Для Java разработчика начать работу с Kotlin очень просто. Автоматический конвертер Java в
    Kotlin, включенный в плагин Kotlin, помогает с первыми шагами. Kotlin Koans поможет вам разобраться в
    ключевых особенностях языка с помощью интерактивных упражнений.

Фреймворки для серверной разработки на Kotlin

  • Spring использует возможности Kotlin, чтобы предлагать
    более лаконичные API, начиная с
    версии 5.0. Онлайн-генератор проектов позволяет быстро сгенерировать новый
    проект в Kotlin.
  • Vert.x, фреймворк для создания интерактивных веб-приложений на JVM, предлагает
    специальную поддержку Kotlin, включая
    полную документацию.
  • Ktor — это фреймворк, созданный JetBrains для создания веб-приложений в Kotlin,
    использующий корутины для высокой масштабируемости и предлагающий простой в использовании идиоматический API.
  • kotlinx.html — это DSL, который можно использовать для HTML разметки в
    веб-приложениях. Он служит альтернативой традиционным системам шаблонов, таким как JSP и FreeMarker.
  • Micronaut — это современный фулстек фреймворк на базе JVM созданный для создания модульных,
    легко тестируемых микросервисов и бессерверных приложений. В него встроены множество полезных функций.
  • http4k — это функциональный инструментарий с небольшими возможностями для HTTP-приложений
    Kotlin, написанный на чистом Kotlin. Библиотека основана на статье «Your Server as a Function» из Twitter и представляет
    моделирование как HTTP-серверов, так и клиентов в виде простых функций Kotlin, которые могут быть собраны вместе.
  • Javalin — это очень легкий веб-фреймворк для Kotlin и Java, который поддерживает WebSockets,
    HTTP2 и асинхронные запросы.
  • Доступные варианты стабильности включают в себя прямой доступ к JDBC, JPA и использование баз данных NoSQL через их
    Java драйверы. Для JPA плагин компилятора kotlin-jpa адаптирует классы,
    скомпилированные на Kotlin, к требованиям фреймворка.

Внедрение серверных приложений Kotlin

Приложения Kotlin могут быть развернуты на любом хосте, поддерживающем веб-приложения Java, включая Amazon Web Services,
Google Cloud Platform и многое другое.

Чтобы развернуть приложения Kotlin на Heroku, вы можете следовать
официальному руководству Heroku.

AWS Labs предлагает пример проекта, демонстрирующего
использование Kotlin для написания AWS лямбда-функций.

Google Cloud Platform предлагает серию учебных пособий по развертыванию приложений Kotlin в GCP для
Ktor и App Engine, а также для
Spring и App engine. Кроме того,
существует интерактивная лаборатория кода
для развертывания Kotlin Spring приложения.

Продукты, использующие Kotlin на сервере

Corda — это open-source платформа распределенных реестров, которая поддерживается крупными
банками и полностью построена Kotlin.

JetBrains Account, система, отвечающая за весь процесс продажи и проверки лицензий в
JetBrains, вся на 100% написана на Kotlin и работает с 2015 года без каких-либо серьезных проблем.

Дальнейшие действия

  • Для более подробного ознакомления с языком ознакомьтесь с документацией Kotlin на этом сайте и на
    Kotlin Koans;
  • Посмотрите вебинар «Micronaut для микросервисов с Kotlin»
    и ознакомьтесь с подробным руководством,
    демонстрирующем, как вы можете использовать функции-расширения Kotlin
    в фреймворке Micronaut;
  • http4k предлагает CLI для создания полностью сформированных проектов и
    стартовый репозиторий для создания всего конвейера CD с использованием GitHub, Travis и
    Heroku с помощью одной bash-команды;
  • Хотите перейти с Java на Kotlin? Узнайте, как выполнять типичные задачи со строками в Java и Kotlin.

Kotlin для веб-разработки: преимущества и возможности

Представленный JetBrains в 2010-х годах Kotlin представляет собой язык программирования общего назначения с открытым исходным кодом. Он предназначен для полной совместимости с Java, что означает, что он компилируется в тот же байт-код, что и Java, и может выполнять его код. С тех пор как в 2019 году Google объявила Kotlin предпочтительным языком разработки для Android, большинство разработчиков приложений для Android перешли на него, что сделало его четвертым по популярности языком программирования.

Однако Kotlin также является отличным языком для веб-разработки. Мы в Surf разрабатываем приложения уже более десяти лет, используя в своих проектах как нативные, так и кроссплатформенные технологии. В этой статье мы расскажем о преимуществах языка программирования Kotlin и о том, какие функции делают его отличным выбором для создания веб-приложений.

Преимущества Kotlin для веб-разработки

Kotlin — это комплексное решение, которое можно использовать для внутренней и внешней разработки вместо Java и JavaScript. Его можно использовать для разработки приложений для сервера, веб-браузера или мобильного устройства. По сравнению с Java Kotlin более понятен и требует меньше строк кода. В среднем 9Код 0009 на Kotlin на 40% короче, чем тот же код на Java. Меньше кода и более лаконичный синтаксис означают, что меньше ошибок попадет в окончательную версию приложения, а удобочитаемость Kotlin упрощает исправление ошибок и поддержку кода.

Нулевая ссылка устранена

Проблема, с которой знакомы многие разработчики Java, — это NullPointerException , которая возникает при доступе к нулевой ссылке из кода и вызывает ошибки и сбои во время выполнения. В Kotlin разработчик не может напрямую назначить null значение для любого объекта или переменной. Вместо этого он использует безопасный оператор вызова (?.) для проверки нулевых ссылок; он выполняет любое действие, только если ссылка имеет ненулевое значение. Решение уменьшает количество ошибок и упрощает кодирование.

Вывод типа

При создании веб-приложения с Kotlin разработчику не нужно явно указывать тип каждой переменной — некоторая информация о типе данных может быть безопасно опущена и идентифицирована компилятором. Kotlin поддерживает два типа вывода типов: локальный тип для типов выражений локально в области оператора или выражения и сигнатура функции для определения типов возвращаемых функцией значений и параметров. Это делает код короче и чище.

Отличная поддержка IDE

Kotlin полностью поддерживает все основные интегрированные среды разработки (IDE), которые используются для разработки Java, а также многие текстовые редакторы. К ним относятся Android Studio, самый популярный инструмент для разработки под Android; IntelliJ IDEA, созданная самой JetBrains; Atom, разработанный GitHub; Эклипс и другие. Такой широкий выбор ПО для разработки упрощает переход разработчика с Java на Koltin без изучения особенностей новой IDE и выбора наиболее подходящего стека разработки для своего проекта.

Классы данных

Одной из задач, занимающих много времени при программировании на Java, является создание классов данных. Операция сопряжена с риском создания дополнительных ошибок в программе, что приводит к более длительным итерациям исправления ошибок. При использовании классов данных в Kotlin программист получает много самогенерируемого кода, что устраняет так называемый «шаблонный» код — участки кода, которые повторяются в нескольких местах практически без изменений. В результате код более читабелен и меньше ошибок в процессе разработки.

Платформы Kotlin для веб-приложений и серверных приложений

Платформы разработки упрощают процесс создания веб-приложения. Благодаря совместимости Kotlin с Java некоторые из самых популярных фреймворков и библиотек экосистемы Java также поддерживают Kotlin. Рассмотрим самые популярные из них.

Spring MVC

Spring framework — один из наиболее широко используемых фреймворков для создания программного обеспечения на Java. Начиная с версии 5.0, фреймворк полностью поддерживает Kotlin и добавил функции, предназначенные для Kotlin. Он использует инициализатор проекта Spring Boot, чтобы упростить разработку с помощью Spring, и имеет все необходимые инструменты для создания автономных приложений производственного уровня . Spring легко настроить и начать программировать. Каркас представляет собой не монолитную конструкцию, а скорее модульную, состоящую из 20 модулей , которые можно выборочно использовать поверх основного модуля, что делает каркас легким решением. Фреймворк способен тестировать приложение вместе с обратной совместимостью .

Spring MVC — это HTTP-ориентированный модуль контроллера модели-представления Spring, который позволяет разработчикам создавать гибкие веб-приложения. Благодаря своей популярности существует множество ресурсов по созданию приложений с помощью Spring и активных сообществ, которые помогут разработчику решить проблему. Однако существует много различий между версиями Spring, и, чтобы избежать путаницы, важно убедиться, какая версия используется, прежде чем искать документацию.

KVision

Объектно-ориентированная веб-инфраструктура, поддерживающая как реактивные, так и императивные модели программирования, KVision позволяет разработчикам Kotlin создавать веб-приложения с удобными готовыми к использованию компонентами пользовательского интерфейса без использования HTML, CSS или JavaScript. Фреймворк все еще активно разрабатывается, но уже обеспечивает отличную связь с фреймворками для разработки на стороне сервера, такими как Spring Boot, Ktor, Javalin и Micronaut, что упрощает создание полнофункциональных приложений с помощью Kotlin.

Doodle

Doodle — это векторно-ориентированная платформа пользовательского интерфейса Kotlin для разработки веб-приложений. Приложения, созданные с помощью Doodle, используют графические возможности браузера для отображения пользовательских интерфейсов без использования HTML, стилей CSS или библиотек Javascript. Платформа обеспечивает полностью настраиваемые макеты и точный контроль над векторными фигурами, градиентами и элементами пользовательского интерфейса, а упрощает рисование форм с помощью указателя и клавиатуры. Набор библиотек и модулей позволяет разработчикам выборочно использовать функции и уменьшать размер пакета.

Javalin 

Javalin считается одной из самых легких платформ для веб-разработки с Kotlin. Он поддерживает HTTP2, API веб-сокетов на основе Lambda и асинхронные запросы. Фреймворк известен своей простотой в освоении, особенно для разработчиков, которые только начинают заниматься бэкэнд-разработкой. Тем не менее, разработчики, плохо знакомые с фреймворком, могут столкнуться с трудностями при изучении основ, потому что документация Javalin не очень хорошо структурирована, некоторая терминология отличается от стандартно используемой, а молодой возраст платформы означает, что есть меньшее сообщество , от которого можно получить поддержку.

KTor

Разработанный JetBrains, компанией, стоящей за Kotlin, Ktor представляет собой платформу для клиентских и серверных приложений на языке программирования Kotlin. Благодаря своему статусу «официального фреймворка Kotlin» KTor является популярной платформой (несмотря на свой молодой возраст), которая работает с минимальным объемом памяти и обладает высокой масштабируемостью. Каркас поддерживает сопрограммы Kotlin — шаблоны проектирования параллелизма, которые упрощают асинхронно выполняемый код, предотвращая зависание приложений из-за длительных задач. Хотя KTor идеально подходит для быстрого прототипирования, он является менее зрелой средой по сравнению с другими, поэтому сложных функций могут потребовать использования нескольких сторонних библиотек.

Создайте свое следующее веб-приложение с помощью Koltin

Если вы думаете о создании современного веб-приложения или приложения на стороне сервера, рассмотрите возможность его создания с помощью Kotlin. Это краткий и простой в освоении язык программирования, используемый ведущими мировыми компаниями, включая Amazon, Uber, Trello, Netflix и другие, полностью совместимый с Java и имеющий сильное сообщество.

Создание приложения на языке Kotlin невозможно без умелых разработчиков. Найм Kotlin-разработчиков в штате может повлечь за собой существенные дополнительные затраты на организацию HR-процесса и предоставление всех привилегий штатных сотрудников этим и без того дорогим специалистам, с другой стороны, наем фрилансеров сопряжен с высокими рисками — бывает сложно оценить их реальную стоимость. уровень мастерства и получить желаемый уровень вовлеченности в проект. Узнайте больше о найме разработчиков koltin в нашей специальной статье.

Если вам нужно приложение для вашего бизнеса, подумайте о том, чтобы доверить его создание специализированной компании-разработчику, которая может взять на себя весь процесс разработки, включая организационные вопросы. Например, мы в Surf имеем более чем 12-летний опыт разработки приложений с использованием как собственных, так и кросс-платформенных технологий и внедрения лучших отраслевых практик. Все наши проекты поставляются с исчерпывающей и структурированной документацией, поэтому ее можно легко передать внутренней команде для обслуживания после выпуска. Заполните короткую форму и мы свяжемся с вами для обсуждения деталей.

Kotlin в веб-разработке | Serengeti

Kotlin — это кроссплатформенный статически типизированный язык программирования общего назначения с выводом типов. Он уже взял на себя разработку Android, но хорош ли он для веб-разработки? В этом блоге мы рассмотрим несколько лучших функций Kotlin для вашего веб-приложения.

Краткий

Одной из ключевых особенностей Kotlin является значительное сокращение стандартного кода. Чтобы создать простой класс Java POJO, вам нужны объявления полей, конструктор и геттеры. Например, давайте создадим класс для клиента с полями Имя , Электронная почта и Компания . Вот как выглядит код, написанный на Java:

Посмотреть суть на GitHub

Как мы видим, большая часть кода должна быть написана/сгенерирована для поддержки действий в полях класса. Что, если мы сможем убрать весь этот шаблонный код и оставить только объявления классов и полей? Это именно то, что сделал Котлин. Это эквивалент класса Java POJO, написанного на Kotlin:

Посмотреть суть на GitHub

Safe

Нулевые ссылки, также известные как «ошибка на миллиард долларов», являются наиболее распространенной причиной исключений в приложениях Java. Мы все видели это разочаровывающее исключение NullPointerException (NPE). Обеспокоенный этой проблемой, Kotlin полностью удалил нулевые ссылки. В Kotlin по умолчанию переменной нельзя присвоить нулевое значение — это первая линия защиты от NPE. Используя оператор, допускающий значение null, ‘?’, переменная может получить нулевое значение, но для доступа к атрибутам переменной необходимо использовать оператор защиты от null ‘?.’. Если переменная имеет нулевое значение, она будет рассматриваться как строка. Единственный способ получить NPE в Kotlin — использовать ненулевой оператор «!!», который вызовет исключение KotlinNullPointerException. Вот несколько примеров:

Посмотреть суть на GitHub

Совместимость

И Java, и Kotlin компилируются в один и тот же байт-код. Благодаря этому возможна интероперабельность. Это означает, что Kotlin может вызывать и выполнять код Java. Совместимость Kotlin делает его совместимым с существующими библиотеками JVM, Android и браузерами.

Kotlin и Spring

Spring официально поддерживает Kotlin, начиная с Spring Framework 5.0, что позволило им ненавязчиво расширять существующие API-интерфейсы, предоставляя лучшую альтернативу служебным классам или специфичным для Kotlin иерархиям классов для добавления Функции Kotlin для Spring. Они также пытаются сделать весь API Spring Framework нулевым со стороны Kotlin и стремятся разрешить работу с нулевыми значениями во время компиляции, а не генерировать исключения NullPointerException во время выполнения.

Создание нового проекта Kotlin Spring

Новый проект можно инициализировать, посетив https://start.spring.io и выбрав язык Kotlin. Gradle — наиболее часто используемый инструмент сборки в Kotlin. Он предоставляет Kotlin DSL, который используется по умолчанию при создании проекта Kotlin, поэтому это рекомендуемый выбор. Но вы также можете использовать Maven, если вам так удобнее. Добавьте следующие зависимости и нажмите  Generate Project :

    9.0161 Spring Web
  • Mustache
  • Spring Data JPA
  • База данных h3
  •  Spring Boot DevTools

Загруженный файл .zip можно извлечь и импортировать в вашу любимую среду IDE, и проект готов к работе.

Пример контроллера Kotlin

В этом разделе я попытаюсь объяснить базовый контроллер Kotlin Spring.

Посмотреть суть на GitHub

Приведенный фрагмент кода показывает пример кода для базового контроллера Spring, написанного на Kotlin. Когда пользователь пытается получить доступ к пути /blog с помощью запроса GET, срабатывает контроллер. Во-первых, он добавляет Title  атрибут модели со значением Blog  и затем возвращает blog.html с моделью.

Посмотреть суть на GitHub

При работе с контроллером REST мы возвращаем сериализованные данные вместо HTML-сайта и модели. В этом примере имеется ArticleController, который получает ArticleRepository через свой конструктор. ArticleRepository должен иметь прямой доступ к сохраненным данным. При доступе к пути «/» с помощью метода GET мы получим каждую статью в репозитории. Поскольку нам не нужно явно указывать тип возвращаемого значения, метод findAll будет возвращать любой тип, полученный из репозитория. Во второй конечной точке мы используем оператор Элвиса «?:», что означает, что если мы получим null в результате поиска в репозитории, конечная точка выдаст новое исключение ReponseStatusException. Этот однострочный код значительно сокращает код по сравнению с его эквивалентом на Java.

Тестирование

Рекомендуется использовать @MockMvcTest и библиотеку SpringMockK, которая похожа, но лучше подходит для Kotlin, чем для Mockito.

Посмотреть суть на GitHub

В этом тестовом примере мы создали одного тестового пользователя и две фиктивные статьи, а затем заявили, что для каждого запроса репозитория на поиск всех статей мы возвращаем список фиктивных статей.

This entry was posted in Популярное