格式无效或类型引发错误时,Micronaut POJO取消序列化错误消息



当向我的应用程序提供请求的字段格式不正确时,如果类型引发错误,则micronaut返回的错误消息是模糊的。

E.G.的两种情况

public class fakeClass {
@NotNull
private String fakeName;
}

如果我的请求是{"fakeName": ""}

那么,正确地说,响应应该是类似的东西

{
"violations": [
{
"field": "create.fakeClass.fakeName",
"message": "must not be blank"
}
],
"type": "https://zalando.github.io/problem/constraint-violation",
"title": "Constraint Violation",
"status": 400 }

但假设我的课是这样的:

public class fakeClass {
@Format("yyyy-MM-dd")
private LocalDate exampeDate;
}

日期无效或{"exampleDate": 202222--01-01}{"exampleDate": 2022/01/01}格式不正确

则错误消息为

{
"type": "about:blank",
"parameters": {
"path": "/project"
},
"status": 400,
"detail": "Required argument [fakeClass fakeClass] not specified"

}

有没有一种简单的方法可以为错误消息提供更多信息,以明确请求失败的原因,例如@NotNull或@NotBlank?

这里的问题不是Micronaut,而是您的有效载荷。您提到的示例是无效的JSON文档

例如,此处的this无效,因为该值既不是数字也不是字符串。

{
"exampleDate": 202222--01-01
}

这将是一个有效的变体

{
"exampleDate": "202222--01-01"
}

请确保将日期作为字符串发送。在您的情况下,这是有效的。

{
"exampleDate": "2022-11-01"
}

通常,建议使用ISO-8601格式发送日期,您已经这样做了(yyyy-MM-dd(。此外,我建议应用全局配置,而不是在每个POJO上使用@Format("yyyy-MM-dd")注释。

jackson:
dateFormat: yyyyMMdd
timeZone: UTC
serializationInclusion: NON_NULL
serialization:
writeDatesAsTimestamps: false

@Format("yyyy-MM-dd")是一个格式化程序,而不是一个Constraint。

您可以使用@Pattern(<regex>)。还有特定日期的,如@Past@PastOrPresent@Future@FutureOrPresent

相关内容

  • 没有找到相关文章

最新更新