Kotlin Spring项目调用JpaRepository.findAll出现类型不匹配怎么解决
问题解决方法
你遇到的类型不匹配错误是两个问题共同导致的,按以下步骤修改即可解决:
1. 修正UserRepo的主键泛型参数
你的User实体类中主键id的类型是Long,但UserRepo继承JpaRepository时,第二个泛型参数(代表主键类型)错误写为String,这是核心错误,需要先修改:
// 修改UserRepo.kt中的继承声明 @Repository interface UserRepo : JpaRepository<User, Long>
2. 处理返回值类型匹配问题
Spring Data JPA中JpaRepository的findAll()方法默认返回类型为Iterable<T>,和你Controller中声明的返回值List<User>不兼容,有两种常用修复方案:
方案1:修改Controller方法返回值类型(改动最小)
直接把返回值声明改为Iterable<User>即可,不影响接口返回的JSON结构:
@GetMapping("/users") fun getAllUser(): Iterable<User> = userRepo.findAll()
方案2:转换Iterable为List(保持原返回值定义)
调用toList()方法把Iterable转为List即可:
@GetMapping("/users") fun getAllUser(): List<User> = userRepo.findAll().toList()
内容的提问来源于stack exchange,提问作者Andika Putra Agustian
相关产品推荐
相关产品推荐

