我目前正在使用 Kotlin 在 Quarkus 中创建一个应用程序。我正在尝试使用 RestEasy、Panache 和 Hibernate 创建一个简单的用户端点。我现在面临的挑战是异常处理没有正确完成。当请求无效时,我想向用户显示正确且易于理解的消息。
这是我的 createUser POST 请求的 UserResource:
@POST
@Transactional
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
fun createUser(@Valid user: User) : CreateUserResponse =
try {
userRepository.persist(user)
CreateUserSuccess(user)
} catch (e: Exception) {
CreateUserFailure(e)
}
这是我的用户实体:
@Entity
data class User (
@Id
@GeneratedValue(generator = "UUID")
var id: UUID? = UUID.randomUUID(),
@NotBlank
var fullName: String,
@Email
@NotBlank(message = "email may not be blank")
var email: String,
@CreationTimestamp
var createdAt: LocalDateTime? = null,
@UpdateTimestamp
var updatedAt: LocalDateTime? = null,
)
为了完整起见,这是我的 UserRepository:
@ApplicationScoped
class UserRepository : PanacheRepository<User>
当我确定请求有效时,创建用户确实有效。但我还想确保在请求无效时能很好地处理无效请求。这是我现在点击 createUser 端点时得到的响应:
com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of
`com.fortuneapp.backend.application.domain.core.models.entities.User`, problem: Parameter specified as non-null is null:
method com.fortuneapp.backend.application.domain.core.models.entities.User.<init>, parameter email
at [Source: (io.quarkus.vertx.http.runtime.VertxInputStream); line: 3, column: 1]
我在这里想念什么?