Konvert
[![Maven Central][maven-image]][maven-url] [![License][license-image]](LICENSE) [![Code Coverage][codecov-image]][codecov-url]
Este es Konvert, un generador de código de mapeo para Kotlin que utiliza Kotlin Symbol Processing (KSP). Diseñado específicamente para Kotlin y sus características, Konvert soporta una amplia gama de casos de uso.
Características principales:
- 🧩 soporta varios tipos de clases →
data,enum,value, POJOs regulares - 🔄 Seguro contra nulos por defecto
- ⚙️ Conversiones inteligentes (
Int→String,Instant→Date, …) - 🔧 Define convertidores reutilizables con
@Konverter - 🔌 Extiende mediante SPI para control total
- 🔗 Colecciones y mapas — mapeo de elementos incluido
- 🛠️ Personalización detallada del mapeo de propiedades
- ☕ 100% interoperabilidad con Java
- ✨ Genera código Kotlin limpio e idiomático
- ⏱️ Generado en tiempo de compilación
- 🚫 Cero reflexión, cero sobrecarga en tiempo de ejecución
- 📦 Funciona perfectamente con Gradle y Maven
Uso
Hay tres maneras diferentes de usar Konvert:
- Usando
@KonvertTo:
@KonvertTo(PersonDto::class)
data class Person(val firstName: String, val lastName: String)
data class PersonDto(val firstName: String, val lastName: String)
``
Esto generará la siguiente función de extensión
`kotlin
fun Person.toPersonDto(): PersonDto =
PersonDto(firstName = firstName, lastName = lastName)
`- Usando
@KonvertFrom (especialmente útil si no puedes cambiar el código de la clase fuente)
`kotlin
class Person(val firstName: String, val lastName: String) {
@KonvertFrom(PersonDto::class)
companion object
}
class PersonDto(val firstName: String, val lastName: String)
`
Esto generará la siguiente función de extensión
`kotlin
fun Person.Companion.fromPersonDto(personDto: PersonDto): Person =
Person(firstName = personDto.firstName, lastName = personDto.lastName)
`- Usando
@Konverter:
`kotlin
class Person(val firstName: String, val lastName: String)
data class PersonDto(val firstName: String, val lastName: String) @Konverter
interface PersonMapper {
fun toDto(person: Person): PersonDto
}
`
Esto generará el siguiente objeto
`kotlin
object PersonMapperImpl: PersonMapper {
override fun toDto(person: Person): PersonDto
= PersonDto(firstName = person.firstName, lastName = person.lastName)
}
`
Para un proyecto de ejemplo simple, eche un vistazo al directorio de ejemplo.Mapeos de tipos
Para mapeos de tipos simples, como de
Instant a Date, ya existe un convertidor de tipos proporcionado con Konvert:
kotlin
@KonvertTo(PersonDto::class)
class Person(val name: String, val birthday: Instant)
class PersonDto(val name: String, val birthday: Date)
Esto generará la siguiente función de extensión
kotlin
fun Person.toPersonDto(): PersonDto = PersonDto(
name = name,
birthday = birthday.let { java.util.Date.from(it) }
)
Echa un vistazo a la documentación para una lista de convertidores de tipo proporcionados.🛈: También puedes crear tu propia biblioteca de convertidores de tipo
implementando TypeConverter y registrarla
usando SPI.
Ajuste fino
La mayoría de las veces, las clases origen y destino pueden no tener los mismos nombres y tipos de propiedades.
Puedes configurar mapeos específicos y renombrar la función de extensión generada así:
kotlin
@KonvertTo(
PersonDto::class,
mappings = [
Mapping(source = "firstName", target = "givenName"),
Mapping(source = "lastName", target = "familyName")
],
mapFunctionName = "asDto"
)
class Person(val firstName: String, val lastName: String)
class PersonDto(val givenName: String, val familyName: String)
Esto generará la siguiente función de extensión
kotlin
fun Person.asDto(): PersonDto = PersonDto(
givenName = firstName,
familyName = lastName
)
`Para más funcionalidades, consulta
la documentación
los KDocs de las anotaciones,
el proyecto de ejemplo
o las pruebas.
Configuración de Gradle
Para usar Konvert con Gradle, debes realizar los siguientes pasos:
- Añade
konvert-api como dependencia para usar las anotaciones:
`kotlin
dependencies {
implementation("io.mcarle:konvert-api:$konvertVersion")
}
`
- Agregue el complemento KSP:
`kotlin
plugins {
id("com.google.devtools.ksp").version("2.3.5")
}
`- Añada
konvert como una dependencia de ksp:
`kotlin
dependencies {
ksp("io.mcarle:konvert:$konvertVersion")
}
`Configuración de Maven
Para usar Konvert con Maven, debes realizar los siguientes pasos:
- Agrega
konvert-api como dependencia para usar las anotaciones:
`xml
io.mcarle
konvert-api
${konvert.version}
`
- Use el ksp-maven-plugin con
konvert como dependencia:
`xml
io.mcarle
ksp-maven-plugin
2.3.5-1
ksp
io.mcarle
konvert
${konvert.version}
`
Más información
- Konvert se compila y prueba principalmente con JDK >=17. También debería funcionar con cualquier versión inferior a JDK 17, pero no está garantizado.
- Konvert es capaz de convertir clases desde y hacia clases escritas en Java (y probablemente también en otros lenguajes JVM).
Alternativas
Hay algunas alternativas a Konvert que quizás quieras revisar:
Mappie no usa KSP, sino que es un plugin de compilador para Kotlin.
Utiliza reflexión en lugar de referencias de String para definir los mapeos,
pero reemplaza el código de reflexión durante el tiempo de compilación con código idiomático Kotlin.MapStruct es una conocida biblioteca de mapeo Java que usa procesamiento de anotaciones (ver kapt).
Puede usarse en proyectos Kotlin, pero no soporta características específicas de Kotlin.kMapper también es un procesador KSP, pero parece soportar solo mapeo entre clases de datos Kotlin.ShapeShift usa reflexión en tiempo de ejecución para mapear entre clases.- Codifica tú mismo (con soporte de IA)
De hecho, a veces puede ser más rápido, fácil y flexible escribir código de mapeo manualmente.
Con la ayuda de herramientas de IA hoy en día, esta tarea repetitiva puede automatizarse hasta cierto punto.Construcción
Gradle
Para construir el proyecto, simplemente ejecuta
gradle build
#### Ejecutar todas las pruebas
Por defecto, solo se ejecuta un subconjunto de las pruebas disponibles, que deberían verificar la mayoría de la funcionalidad de Konvert.
Para ejecutar todas las pruebas, añade la propiedad
runAllTests, por ejemplo:gradle test -PrunAllTests
Documentación
Para servir el sitio Jekyll localmente, simplemente ejecuta el siguiente comando dentro de
docs`:docker run --rm -it -v "$PWD":/site -p 4000:4000 bretfisher/jekyll-serve
CI
GitHub Actions se usan para:
- compilar y probar
- lanzar y publicar en un repositorio Maven
- generar documentación y desplegarla en GitHub Pages.
Registro de cambios
El registro de cambios contiene todos los cambios notables.
Licencia
Copyright 2023 Marcel Carlé
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en conformidad con la Licencia. Puedes obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones bajo la Licencia.
[maven-image]: https://img.shields.io/maven-central/v/io.mcarle/konvert.svg
[maven-url]: https://central.sonatype.com/artifact/io.mcarle/konvert/
[license-image]: https://img.shields.io/github/license/mcarleio/konvert.svg
[codecov-image]: https://img.shields.io/codecov/c/github/mcarleio/konvert.svg
[codecov-url]: https://codecov.io/gh/mcarleio/konvert
--- Tranlated By Open Ai Tx | Last indexed: 2026-04-08 ---