Spring boot 公开属性和Kotlin数据类的接口

Spring boot 公开属性和Kotlin数据类的接口,spring-boot,kotlin,spring-data-jpa,spring-rest,Spring Boot,Kotlin,Spring Data Jpa,Spring Rest,我在Kotlin有一个数据类: data class Image (val name: String, val url: URL) {} data class Image (val name: String, val url: URL) : HasName {} 我想通过restspringboot,JPA提供这些图像的列表,但我只想在本例中提供某些属性,只是名称,而不是要提供的url。从我所读到的内容来看,我需要使用一个投影-定义一个只有“getName”函数的接口: interfac

我在Kotlin有一个数据类:

data class Image (val name: String, val url: URL) {}
data class Image (val name: String, val url: URL) : HasName {}  
我想通过restspringboot,JPA提供这些图像的列表,但我只想在本例中提供某些属性,只是名称,而不是要提供的url。从我所读到的内容来看,我需要使用一个投影-定义一个只有“getName”函数的接口:

interface HasName {
  fun getName () : String
}
..然后设置数据类来实现这一点,并让RestController为HasNames而不是图像提供服务:

@GetMapping("/images")
fun getImages () : List <HasName> {
  return imageService.getImages()
}
我得到一个错误:

意外重写:以下声明具有相同的JVM签名GetUrlJava/net/URL;:

公共最终乐趣:com.figmentsignage.server.data.campaign.Image中定义的URL public abstract fun getUrl:com.figmentsignage.server.data.campaign.Image中定义的URL


有没有简单的办法?我可以给这个方法一个不同的名称,并在Image类中重新定义它,但这有点混乱。或者我可以在接口中定义'name'变量,并在图像中覆盖它,这同样很混乱。理想情况下,我希望尽可能少地更改Image类。

以下是我在kotlin中定义这些类的方法,只需使用name属性,无需使用getName方法,并确保使用override关键字:


我认为你是对的。我只是不想对Image类进行更改。如果映像实现的两个接口都声明了“name”,这仍然有效吗?只要它们都声明了相同类型的name,就可以正常工作
interface HasName {
   val name: String
}

data class Image(override val name: String, val url: URL): HasName