我目前正在使用静态编程语言在Quarkus中创建一个应用程序。我正在尝试使用RestEasy、Panache和Hibernate创建一个简单的用户endpoint。我现在的挑战是异常处理没有正确完成。当请求无效时,我想向用户显示正确且可理解的消息。
这是我的创建用户 POST 请求的用户资源:
@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,
)
为了完整起见,这是我的用户存储库:
@ApplicationScoped
class UserRepository : PanacheRepository<User>
当我确定请求有效时,创建用户确实有效。但我也想确保在无效时有效地处理无效请求。这是我现在在点击创建用户终结点时得到的响应:
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]
我在这里错过了什么?
将您的字段设置为可空,初始化它们并将< code>@field:放在注释之前,这样就可以工作了。
@Entity
data class User (
@Id
@GeneratedValue(generator = "UUID")
var id: UUID? = UUID.randomUUID(),
@field:NotBlank
var fullName: String = null,
@field:Email
@NotBlank(message = "email may not be blank")
var email: String = null,
...
您在属性的可枚举性方面遇到了问题,因为您甚至很难定义var
属性,其中一些属性不可为空?
因此,由于您正在反序列化json消息,其余服务的输入,Jackson无法创建模型类用户
的新实例,因为某些必填字段不存在。
这类似于当您试图创建一个新的对象,但没有在构造函数中提供所需的参数。
这里有一些与kotlin、Jax-RS和Hibernate-Panache一起工作的建议https://quarkus.io/guides/kotlin.
你正在尝试归档它完全可能,但是如果你想使用你的实体作为请求主体,你必须使所有字段为空,否则底层的Json序列化程序将无法创建你的模型的新实例来传递@Valid
验证并生成约束冲突报告。
你有一些选择。
如果你有更多的疑问,我可以提供一个例子。
我想在Quarkus中注入bean一个静态编程语言字段。示例文件看起来像 构造函数参数注入工作正常,但字段仍处于未初始化状态。 控制台输出: 有可能在科特林的Quarkus中使用CDI场注入吗?如果是,需要为注射设置什么才能工作? 我是从uberjar运行应用程序,而不是从本地图像运行。 jar包含生成的类org.example.InjectDemo_Bean包含一个方法的分解版本,该方法不显示任
如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties? 目前我喜欢下面的例子: 但是它看起来很丑陋,实际上不是一个iable,foo是常量ue,应该在启动期间初始化,将来不会改变。
我需要使用jwt验证令牌。木卫一 为此,我有一个令牌(许可证)eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRJZCI6MjcwMzYwLCJwYWNrYWdlc............" 和json(证书) “密钥”:[{“kid”:“1”,“e”:“AQAB”,“kty”:“RSA”,“alg”:“RS256”,“n”:“rXYc2Ehtb42R
下面的代码是Quarkus Microprofile API应用程序中控制器的一部分。 它返回分页的帐户列表。 当用户调用API时,提供了错误的“限制”或“偏移”类型,即: 就像它应该的那样?
问题内容: 我有一个简单的表格。所有组件和状态都保存在Page组件中。有2个显示标题和3个输入字段。第一个输入应该是文本,第二个和第三个输入应该是整数。当用户输入错误的数据类型时,我想在输入字段旁边弹出一条错误消息。我的问题与React.JS的最佳做法有关 谁认为该值有效?我想输入字段的唯一工作就是将值引导回到保持状态的组件,这是否意味着只有Page可以确定值是否有效? 然后应该如何显示弹出窗口?
模拟方法: