我正在用Kotlin + Spring Boot + Hibernate编写简单的CRUD,并想到了这个问题:
我有一个领域User
类中调用age
和类型Int
import javax.persistence.*
import javax.validation.constraints.NotBlank
import javax.validation.constraints.Size
@Entity
@Table(name = "users")
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long,
@NotBlank
@Column(unique = true)
@Size(min = 1, max = 100)
val username: String,
@NotBlank
@Size(max = 50)
val firstName: String,
@Size(max = 50)
val lastName: String?,
@Size(min = 1, max = 100)
val age: Int
)
然后我有发布请求,该请求创建了一个用户
@PostMapping
fun post(@RequestBody user: User): User {
log.debug("POST: {}", user)
return userRepository.save(user)
}
问题是,当我错过age
JSON中的字段时,它不会响应400错误,而是默认为0
。
如何使该字段为必填字段?
我通过这篇文章解决了这个问题,也感谢@Adam Arold展示了最佳做法。
我创建了新UserDTO
类:
import ai.leavingstone.flywayspringdemo.domain.User
import javax.validation.constraints.*
data class UserDTO(
private val id: Long = -1,
@field:NotBlank
@field:Size(min = 1, max = 100)
private val username: String,
@field:NotBlank
@field:Size(max = 50)
private val firstName: String,
@field:Size(max = 50)
private val lastName: String?,
@field:NotNull
private val age: Int?
) {
fun toUser(): User = User(
id,
username,
firstName,
lastName,
age!!
)
}
在没有数据验证注释起作用之前,在添加@field
前缀之后它可以正常工作。@NotNull
onInt
也可以使用,并且该id
字段的默认值也是如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句