如何在Spring WebFlux Rest API中显示验证错误消息和代码



我在一个Reactive SpringBoot应用程序中使用Spring Web MVC,并编写了一个自定义验证器。在验证错误的情况下,使用400响应代码,这很好,但是AbstractErrorWebExceptionHandler捕获了这个并吐出

{
"timestamp": 1651678946524,
"path": "/signup",
"status": 400,
"error": "Bad Request",
"requestId": "0f61cb96-1"
}

对客户端不是很有用。如何显示错误信息和代码?我知道它们是可用的,因为它们被记录了:

DEBUG 32475 --- [     parallel-1] a.w.r.e.AbstractErrorWebExceptionHandler : [0f61cb96-1] Resolved [WebExchangeBindException: Validation failed for argument at index 0 in method: public reactor.core.publisher.Mono<...with 1 error(s): [Field error in object 'userSignup' on field 'username': rejected value [matilda0]; codes [username.exists.userSignup.username,username.exists.username,username.exists.java.lang.String,username.exists]; arguments []; default message [null]] ] for HTTP POST /signup

任何帮助都将不胜感激,谢谢。

我是这样做的:

private void validate(SomeEntity someEntity) {
Errors errors = new BeanPropertyBindingResult(someEntity, "SomeEntity");
validator.validate(someEntity, errors);
if (errors.hasErrors()) {
throw new ServerWebInputException(errors.toString());
}
}

验证器被注入:

private final Validator validator;
private final SomeEntityDao dao;
public SomeEntityHandler(
Validator validator,
SomeEntityDao dao
) {
this.validator = validator;
this.dao = dao;
}

项目:WebFluxR2dbc

添加

server.error.include-binding-errors=ALWAYS

应用程序。属性似乎解决了这个问题,尽管它仍然不能正确查找消息代码。要实际使错误消息本身出现在响应中,我必须在验证器中连接MessageSourceAccessor,并将其用作默认消息!

errors.rejectValue("username","username.exists",msgs.getMessage("username.exists"))

所以我一定还是遗漏了一些东西,但是现在可以工作了。

相关内容

  • 没有找到相关文章

最新更新