首页 > 解决方案 > 只有在 Koltin 中不为空时才更新值

问题描述

因此,我尝试仅在请求的响应正文中不为 null 时更新值。这就是它目前的样子,如果我不发送所有值,它们只会在数据库中为空。我将 Kotlin 与 JpaRepositories 一起使用。

@PutMapping(value = ["/patient"], produces = ["application/json"])
fun updateClient(@RequestBody  client: Client): ResponseEntity<Client>{
    val old = repository.findById(client.id).orElseThrow{ NotFoundException("no patient found for id "+ client.id) }

    val new = old.copy(lastName= client.lastName, firstName = client.firstName,
            birthDate = client.birthDate, insuranceNumber = client.insuranceNumber)
    return ResponseEntity(repository.save(new), HttpStatus.OK)
}

这就是模型类的样子

@Entity
data class Client(
        @Id
        val id: String,
        val lastName: String?,
        val firstName: String?,
        val birthDate: Date?,
        val insuranceNumber: Int?
)

有没有更简单的方法,然后为每个值编写一次副本并检查它之前是否不为空?

标签: restkotlinjpaspring-data-jpa

解决方案


在不修改当前模型或不必创建其他辅助模型/功能的情况下,唯一可以使该过程更容易的事情是使用 elvis 运算符。

 val new = old.copy(
        lastName = client.lastName ?: old.lastName,
        firstName = client.firstName ?: old.firstName,
        birthDate = client.birthDate ?: old.birthDate,
        insuranceNumber = client.insuranceNumber ?: old.insuranceNumber
    )

其他方法是创建我们自己的忽略输入空值的复制函数,或者创建一个执行相同操作的自定义构造函数。但这需要更多的工作,这取决于模型是否有意义,对于我认为没有意义的示例模型,这将是矫枉过正


推荐阅读