rest - 只有在 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?
)
有没有更简单的方法,然后为每个值编写一次副本并检查它之前是否不为空?
解决方案
在不修改当前模型或不必创建其他辅助模型/功能的情况下,唯一可以使该过程更容易的事情是使用 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
)
其他方法是创建我们自己的忽略输入空值的复制函数,或者创建一个执行相同操作的自定义构造函数。但这需要更多的工作,这取决于模型是否有意义,对于我认为没有意义的示例模型,这将是矫枉过正
推荐阅读
- postgresql - 是否可以在 PostgreSQL 中为子表添加索引?
- android - 如何在播放计费库上处理取消订阅和到期日期
- python - 有没有办法直接在字典中定义函数?
- javascript - 点击角度的下一个内容
- excel - `Range.Hyperlink.Shape` 有什么作用?
- javascript - 如何映射对象数组并返回每个对象值的长度?
- python - 从列表中选择值以创建另一个
- google-apps-script - 基于时间的触发器不适用于附加用户
- powershell - 如何在 powershell 脚本中使用 Get-clipboard 输出?
- python - 在熊猫数据框列中查找非数字值