当向我的应用程序提供请求的字段格式不正确时,如果类型引发错误,则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
。