springboot+kotlin项目中Application中的main方法启动报错

Kotlin 小科普

这里大家一个小科普,Kotlin 是完全兼容JVM ,完全无缝支持Java ,并且在您可以在JavaKotlin 来回自如的切换,所以开文就借用了官方的一句话,是 Android 中的 Swift 。就好比 Swift 一样,在支持 Swift新语法的时候,也支持 C 语法。但是我有意见了,因为我一接触后,发现这是错误的。因为它是 Java 中的 Swift

Kotlin Demo

请关注我的 Kotlin + Springboot Demo  : http://www.sojson.com/jc/kotlin-index.html

Springboot Application main 方法正确姿势

因为   Springboot  需要启动一个 public static  修饰的 main 方法,而   Kotlin  是取消了 static 关键词,静态方法和参数统一写在 companion objectinternal 模块内可见,inner 内部类。

从上得到,可能觉得是这样写的:

  1. @SpringBootApplication
  2. @MapperScan(basePackages = arrayOf("com.sojson.mapper"))
  3. open class Application {
  4. companion object{
  5. fun main(args: Array<String>) {
  6. SpringApplication.run(Application::class.java, *args)
  7. }
  8. }
  9. }
  10. //测试调用
  11. fun test(){
  12. var strs : Array<String> ?=null
  13. Application.main(strs as Array<String>)
  14. }

但是得到的结果是:

 
  1. 错误: 在类 com.sojson.Application 中找不到 main 方法, 请将 main 方法定义为:
  2. public static void main(String[] args)
  3. 否则 JavaFX 应用程序类必须扩展javafx.application.Application

有的人可能会说Idea不是可以翻译吗?我也试过了。翻译后是这样的:

  1. @JvmStatic fun main(args: Array<String>) {
  2. SpringApplication.run(Application::class.java, *args)
  3. }

不知道为何是飘红的。

正确的的姿势

代码如下:

 
  1. @SpringBootApplication
  2. @MapperScan(basePackages = arrayOf("com.sojson.mapper"))
  3. open class Application {
  4. }
  5. /**
  6. * 在此我表示一下,我一边听歌,然后一边Coding,发现1个小时过去了,还是没解决这个问题?一直找不到Main方法,或者说我不是static修饰的。
  7. * 因为Kotlin取消了 static 关键词。为了和Application统一级别,写在外面,有可能有其他想法,。
  8. *
  9. * 在选择启动Application的时候,请选择ApplicationKt,有红X没关系
  10. *
  11. * 选择错误会出现如下Exception:
  12. * 错误: 在类 com.sojson.Application 中找不到 main 方法, 请将 main 方法定义为:
  13. * public static void main(String[] args)
  14. * 否则 JavaFX 应用程序类必须扩展javafx.application.Application
  15. */
  16. fun main(args: Array<String>) {
  17. SpringApplication.run(Application::class.java, *args)
  18. }

配置如图(Run Edit Configurations):

这里有可能选择完毕后,有显示红色错误提示,请先不用管,直接运行即可。

Kotlin TO Java 翻译工具介绍

Intellij IDEA  自带的 Kotlin Bytecode  ,可以把你现在写的Kotlin代码翻译成   Java  代码。有利于你的错误排查。另外Intellij IDEA 你可以翻译  Java  代码为   Kotlin  代码,大部分翻译的都没问题(Copy后粘贴即可)。


转自:https://www.sojson.com/blog/240.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Spring Boot 和 Kotlin 更新 API 的详细示例: 1. 创建一个新的 Spring Boot 项目并添加必要的依赖项,如下所示: ```gradle dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.jetbrains.kotlin:kotlin-reflect") } ``` 2. 创建一个名为 `User` 的数据,用于表示要更新的用户: ```kotlin data class User( val id: Long, val name: String, val email: String ) ``` 3. 创建一个名为 `UserController` 的控制器,用于处理用户更新求: ```kotlin @RestController @RequestMapping("/api/users") class UserController(private val userRepository: UserRepository) { @PutMapping("/{id}") fun updateUser(@PathVariable id: Long, @RequestBody user: User): User { val existingUser = userRepository.findById(id) .orElseThrow { EntityNotFoundException("User with id $id not found") } existingUser.name = user.name existingUser.email = user.email return userRepository.save(existingUser) } } ``` 4. 创建一个名为 `UserRepository` 的存储库接口,用于访问用户数据: ```kotlin @Repository interface UserRepository : JpaRepository<UserEntity, Long> ``` 5. 创建一个名为 `UserEntity` 的实体,用于映射到数据库的用户表: ```kotlin @Entity @Table(name = "users") data class UserEntity( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long = 0, @Column(nullable = false) var name: String, @Column(nullable = false, unique = true) var email: String ) ``` 6. 运行应用程序并使用 cURL 或其他 HTTP 客户端发出更新用户的求: ```bash curl -X PUT -H "Content-Type: application/json" -d '{"name": "John Doe", "email": "john.doe@example.com"}' http://localhost:8080/api/users/1 ``` 这将更新 ID 为 1 的用户的名称和电子邮件,并返回更新后的用户对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值