У меня есть проект с Kotlin и Springboot. В этом проекте у организации есть следующие поля: id
, name
и parent
. Я хочу только получить id
и name
. Поэтому я сделал представление интерфейса проекции для этой сущности.
Это моя сущность:
@Entity
data class Keyword(
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
var id: UUID? = null,
@Column(columnDefinition = "BINARY(16)")
var parent: UUID? = null,
@NotBlank
var name: String? = null
)
Репозиторий:
@Repository
interface KeywordRepository: JpaRepository<Keyword, UUID> {
@Query(value = "SELECT keyword.id, keyword.parent, keyword.name FROM keyword LEFT JOIN project_keyword ON project_keyword.keyword_id = keyword.id WHERE project_keyword.project_id LIKE :id", nativeQuery = true)
fun findAllKeywordsByProjectId(id: UUID): MutableList<KeyWordView>
}
Служба:
@Service
class KeywordService (
private val projectService: ProjectService,
private val keywordRepository: KeywordRepository
) {
fun getKeywordsByProjectId(id: UUID): MutableList<KeyWordView> {
projectService.checkIfProjectExistsById(id)
return keywordRepository.findAllKeywordsByProjectId(id).toMutableList()
}
}
Мой класс интерфейса проекции:
interface KeyWordView {
val id: UUID
val name: String?
}
Когда я вызываю эту конечную точку через класс контроллера. Я получаю этот вывод:
"list": [
{
"name": "MARINE MICROBIOTA",
"id": "0,31,-36,77,29,123,66,-25,-127,-43,-31,83,104,-90,47,10"
}
]
Но если я изменю val id: String
на val id: UUID
в моем KeywordView
интерфейсе, я получаю следующую ошибку:
{
"code": 500,
"data": null,
"message": "Could not write JSON: Projection type must be an interface!; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Projection type must be an interface! (through reference chain: no.inmeta.ris.util.response.ResponseDto[\"data\"]->no.inmeta.ris.util.pagination.PageDto[\"list\"]->java.util.ArrayList[0]->com.sun.proxy.$Proxy199[\"id\"])",
"status": "FAIL"
}
Кто-нибудь знает Как решить эту проблему? Я хочу получить UUID как UUID не в странном формате.
Спасибо!