Я пытаюсь реализовать Spring Converter, но я получил ошибку в модульном тестировании:
Kotlin: Null can not be a value of a non-null type TodoItem
Если я пытаюсь изменить сигнатуру метода преобразования с
override fun convert(source: TodoItem): GetTodoItemDto?
до
override fun convert(source: TodoItem?): GetTodoItemDto?
, которые передают метод null, у меня есть другие ошибки:
Error:(10, 1) Kotlin: Class 'TodoItemToGetTodoItemDto' is not abstract and does not implement abstract member @Nullable public abstract fun convert(p0: TodoItem): GetTodoItemDto? defined in org.springframework.core.convert.converter.Converter
Error:(14, 5) Kotlin: 'convert' overrides nothing
Образцы кода:
TodoItemToGetTodoItemDto.kt
package com.example.todo.converters
import com.example.todo.dtos.todo.GetTodoItemDto
import com.example.todo.model.TodoItem
import org.springframework.core.convert.converter.Converter
import org.springframework.lang.Nullable
import org.springframework.stereotype.Component
@Component
class TodoItemToGetTodoItemDto : Converter<TodoItem?, GetTodoItemDto> {
@Nullable
@Synchronized
override fun convert(source: TodoItem): GetTodoItemDto? {
if(source == null){
return null
}
return GetTodoItemDto(source.id, source.name, source.isComplete)
}
}
TodoItemToGetTodoItemDtoTest.kt
package com.example.todo.converters
import org.junit.Before
import org.junit.Test
import org.junit.Assert.*
class TodoItemToGetTodoItemDtoTest {
private lateinit var conveter : TodoItemToGetTodoItemDto
@Before
fun setUp() {
conveter = TodoItemToGetTodoItemDto()
}
@Test
fun testNullObject(){
assertNull(conveter.convert(null))
}
}
GetTodoItemDto.kt
package com.example.todo.dtos.todo
data class GetTodoItemDto(val id: Long, val name: String, val isComplete: Boolean)
TodoItem.kt
package com.example.todo.model
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Entity
data class TodoItem @JsonCreator constructor(
@Id
@GeneratedValue
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
var id: Long,
var name: String,
var isComplete: Boolean){
constructor(): this(0, "", false)
constructor(name:String) : this(0, name, false)
}
Не могли бы вы объяснить мне, как это можно реализовать с помощью Kotlin? Может быть, я что-то делаю не так, используя Kotlin?