1、前言

最近在用Kotlin Spring Boot写一个后端项目,实体类习惯性地用了Kotlin中的data class,但是Spring要求要有一个无参的构造函数,否则可能会抛出java.sql.SQLDataException。要使data class能够生成一个无参的构造函数,有两种方法可以做到:

1.给data class的构造函数中的每一个参数都赋上默认值。比如:

data class User(
  @TableId(value = "id", type = IdType.AUTO)
  var id: Int?=-1,
  var userName: String?=null, //用户名
  var age: Int?=null, //年龄
  var password: String?=null, //密码
  var name: String?=null, //姓名
  var email: String?=null  //邮箱
) : Serializable

2.使用无参编译器插件no-arg。下面我们就来看看这种方法。

2、具体步骤

2.1 添加插件依赖
首先需要在工程的build.gradle中添加no-arg插件的依赖,版本跟Kotlin的版本一致:

plugins {
    ……
  id "org.jetbrains.kotlin.plugin.noarg" version "1.3.41"
}

我用的是plugins的形式,如果你使用的是buildscript 块的话就可以这样添加:

buildscript {
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-noarg:1.3.41"
  }
}

apply plugin: "kotlin-noarg"

2.2 指定无参注解列表

说实话,在看官方文档时这一步并不好理解,这里只描述我经过自己的实践之后得出的经验。首先创建一个注解类,类名我们可以定为NoArg:

annotation class NoArg

然后最关键一步来了,回到工程的build.gradle文件,添加无参注解列表:

noArg {
  annotation("com.lindroid.projectname.annotation.NoArg")
}

annotation中的路径就是我们创建的NoArg注解类所在的包目录。路径一定要写好,不要出错!此时无参插件就已经配置好了。我们可以在data class前面添加@NoArg注解,这样编译器就能为其生成一个无参构造函数。使用示例如下:

@NoArg
data class User(
  @TableId(value = "id", type = IdType.AUTO)
  var id: Int?,
  var userName: String?, //用户名
  var age: Int?, //年龄
  var password: String?, //密码
  var name: String?, //姓名
  var email: String?  //邮箱
) : Serializable

2.3 kotlin-jpa中的无参注解

如果你的项目中已经添加了kotlin-jpa插件,那么基本上就不必单独添加无参插件了。kotlin-jpa对无参插件做了包装,当你使用 @Entity、 @Embeddable 与 @MappedSuperclass这几个注解时,都会默认支持无参注解的。

3、参考文章

Kotlin官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

Kotlin之在Gradle中无参(no-arg)编译器插件的使用详解的更多相关文章

  1. Kotlin难点解析:extension和this指针

    扩展是Kotlin语言中使用非常简单的一个特性。关于这个问题,其实我之前的一篇文章[[Kotlin]LambdaandExtension](https://www.jianshu.com/p/d7a...中有提到过。为了解决这个问题,官方提出了两个新的概念:dispatchreceiver和extensionreceiver。extensionreceiver:中文翻译为扩展接收者。为了简化,这里我们将dispatchreceiver简称为DR,将extensionreceiver简称为ER。如果你习惯了

  2. android – 使用Gradle构建本机代码时会删除符号

    )或者我错过了什么?解决方法符号位于:src/main/obj/local所以添加到build.grade:然后转到DebugConfiguration->调试器并添加到Symbol目录:应用程序/建立/中间体/jniLibs之后我能够调试我的本机代码.

  3. Android studio – Faild to resolve:com.android.support:design:26.0.1错误

    我有一个错误叫:我的androidstudio版本是3.0beta1.我的gradle文件如下:我想把“设计”放到我的项目中,但我不能这样做.我该怎么做?解决方法尝试改变和或者不要更改为bulidToolsversion更改依赖项

  4. android-studio – IDEA中Gradle自动完成的位置在哪里?

    解决方法对于Groovy插件,它可能是Cucumber.我知道Gradle使用Groovy的一些技术和语法,所以我尝试在第一次尝试时安装一些Groovy插件并取得成功.安装此插件的步骤:>在MacOS上:首选项…

  5. Android L上片段的Lint错误:“此方法不会覆盖任何内容”

    klwQWQ6Z!

  6. 在Android中启用MultiDex支持以在Eclipse中实现65K方法

    我正在尝试在eclipse中构建Multidexapk,但无法成功.我尝试了以下步骤,在Android应用程序中配置Multidex支持:>我已将位于/extras/android/support/multidex/的Multidex库添加到我的项目中.>由于我的应用程序具有自定义应用程序类,我已将android.support.multidex.MultiDexApplication类扩展到我的

  7. Android Studio导入模块Gradle构建错误

    我试图在AndroidStudio(GameBaseUtils)中添加一个目录作为依赖项.我已经看到其他SO答案只是为他们的特定问题发布正确的gradle配置,但是我不明白我如何能够根据我的情况调整他们的答案.这是我做的:第一步:文件–>导入模块–>导航到目录并选择它.第二步–文件–>项目结构–>模块–>选择我的应用程序–>依赖关系–>将模块添加为我的项目的依赖项.现在我的代码没有任何红线表示导入

  8. Android Studio 3.0 – 对于externalNativeBuild,Gradle Sync失败

    当我迁移到Androidstudio3.0时,我得到以下回溯我的build.gradle就在这里.任何帮助深表感谢!

  9. android – Kotlin类NoClassDefFoundError崩溃

    我有一个使用以下库的现有Android项目:>Autovalue>Dagger2>RxJava>Retrolambda我正在尝试添加Kotlin支持,以便我可以将项目慢慢迁移到Kotlin.这就是我所做的.>添加了Kotlin依赖.>将其中一个类转换为Kt类并转移到src/main/kotlin/..包中.>在源集中添加了kotlin.sourceSets{main.java.srcDirs=’s

  10. android-gradle – Android espresso-contrib gradle build失败

    我正在尝试学习androidespresso..我遵循了一些基本的教程,它工作正常.但现在我想在android导航抽屉上做一些测试.为此,我需要使用gradle依赖androidTestCompile’com.android.support.test.espresso:espresso-contrib:2.2.2′,但它导致与其他依赖项冲突.我的gradle文件:错误是这样的:紧随其后:linkf

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部