*`I have below schema definition to represent commission amount in my openapi contract.`*
"properties": {
"Amount": {
"type": "number",
"description": "The amount of tnx",
"pattern" : "^-?[0-9]*(\\.([0-9]{1,2}))?$",
"format": "big-decimal",
"minimum": 0.01,
"maximum": 49999.99,
"exclusiveMinimum": false,
"exclusiveMaximum": false,
"example" : "9999.99"
},
生成代码:
@NotNull @Valid @DecimalMin("0.01") @DecimalMax("49999.99")
@Schema(name = "amount", example = "9999.99", description = "The amount of tnx", required = true)
public BigDecimal getAmount() {
return amount;
}
- 当我给出高于50000或低于0.01时,它会通过 Postman 给出正确的验证消息 *
{
"errors": [
{
"code": "DecimalMax",
"message": "must be less than or equal to 49999.99",
"field": "Amount"
}
]
}
{
"errors": [
{
"code": "DecimalMin",
"message": "must be greater than or equal to 0.01",
"field": "Amount"
}
]
}
but i want override the code with some some number to represent the error code like 100,101 etc
{
"errors": [
{
"code": "100",
"message": "must be less than or equal to 49999.99",
"field": "Amount"
}
]
}
{
"errors": [
{
"code": "101",
"message": "must be greater than or equal to 0.01",
"field": "Amount"
}
]
}
can i specify any annotation on swagger to achieve this
1条答案
按热度按时间kknvjkwl1#
默认情况下,当字段验证失败时,Spring将抛出
MethodArgumentNotValidException
。这由Springsspring-boot-starter-validation
内部管理。您可以使用@RestControllerAdvice
或@ControllerAdvice
覆盖此异常处理。首先,为你的React建立一个基本模型,这是一个非常简单的模型。
然后,创建控制器通知类。
这个非常简单的示例将返回以下响应
备注
你可以随意设置返回给用户的代码(也就是exception.setCode(“99999MY_STATUS_CODE”))。但是,这对用户没有任何意义,因为它与控制器发送的作为
ResponseEntity
一部分的头不匹配。我建议坚持使用定义的HttpStatus类型作为返回给用户的代码。另外,除非你特别想得到一个
BigDecimal
作为你的类型,将数字的格式设置为float
或double
将得到预期的dataType,否则,声明big-decimal
是不必要的,因为这是没有定义格式的number
的默认值。同样,
exclusiveMinimum
和exclusiveMaximum
的缺省值默认为false,因此不需要将它们包含在模式中。最后,我建议调整您的模式以包含响应描述。
这应该涵盖了所有的基础。请随意扩展
RestException
和RestExceptionHandler
类。正如我所说的,这些是基本的示例。您可以使它们更加健壮(即基于字段或错误消息的多个返回)。