我有一个Sping Boot 项目,它使用Spring WebFlux实现API。
我使用openapi-generator-maven-plugin
插件来生成Swagger-to-Java对象。
当POST请求包含与Swagger API Spec不匹配的字段时,将返回以下响应
{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Invalid request content.",
"instance": "/v1/internal/create"
}
字符串
问题是没有关于导致问题的字段和错误的具体信息。
我记得在较老的Sping Boot 版本中,有这样的信息。例如:字段ID应该是一个数字或类似的东西。
根据我到目前为止的发现,这是因为安全,不暴露于敏感的信息。
我还发现了两个可以用来解决这个问题的方法:
1.启用include-message
属性(不推荐)
server:
error:
include-message: always
型
结果:虽然我添加了这个 prop ,但对我没有效果
1.在ControllerAdvice
中从ResponseEntityExceptionHandler
扩展handleMethodArgumentNotValid
方法,如ResponseEntityExceptionHandler
结果:如果类来自Package org.springframework.web.servlet.mvc.method.annotation
,则可以使用这种方法,但当我使用Spring WebFlux时,我的类来自Package org.springframework.web.reactive.result.method.annotation
,其中不存在这种方法
所以任何关于如何解决它的建议将受到高度赞赏!
1条答案
按热度按时间44u64gxh1#
我发现应该做什么来返回正确的信息哪些字段没有通过验证
我使用扩展了
ResponseEntityExceptionHandler
的ControllerAdvice
,调试后发现这两个方法在模型验证期间被触发示例实现:
字符串
除此之外,我还使用了Sring使用的
ProblemDetail
对象,因为我希望有一个一致的错误模型例如
@ControllerAdvice
处理自定义错误型
型