【发布时间】:2019-12-14 11:48:28
【问题描述】:
我在 Kotlin 中有一个数据类:
data class Image (val name: String, val url: URL) {}
我想通过 REST(Spring Boot,JPA)提供这些图像的列表,但我只想提供某些属性(在此示例中只是名称,而不是 URL)。根据我的阅读,我需要使用投影 - 定义一个只包含“getName”函数的接口:
interface HasName {
fun getName () : String
}
..然后设置数据类来实现这一点,并让 RestController 服务于 HasNames 而不是图像:
@GetMapping("/images")
fun getImages () : List <HasName> {
return imageService.getImages()
}
(或者这就是我在 Java 中所做的)。
但是,如果我在 Kotlin 中这样做:
data class Image (val name: String, val url: URL) : HasName {}
我收到一个错误:
意外覆盖:以下声明具有相同的 JVM 签名 (getUrl()Ljava/net/URL;):
public final fun
<get-url>():在 com.figmentsignage.server.data.campaign.Image 中定义的 URL public abstract fun getUrl():在 com.figmentsignage.server.data.campaign.Image 中定义的 URL
有没有简单的方法解决这个问题?我可以给该方法一个不同的名称并在 Image 类中重新定义它,但这有点乱。或者我可以在界面中定义“名称”变量并在图像中覆盖它,再次混乱。理想情况下,我希望尽可能少地更改 Image 类。
【问题讨论】:
标签: spring-boot kotlin spring-data-jpa spring-rest