大家好,我是spring boot webflux (反应式编程框架)的初学者。你有关于如何将验证消息放在错误的请求消息体中的想法吗?非常感谢

发布于 2020-07-28 09:43:53
您可以在验证传入数据的层上执行类似的操作(最好将您的功能分成多个@Service/@Component类来表示层: Rest层<->外观(验证)层<->业务逻辑层<->存储库(持久性)层):
@Autowired private UserService userService;
@Override
public Mono<UserDatabaseModel> create(@NonNull UserDatabaseModel user) {
return validUserOrError(user)
.flatMap(userService::save);
}
private Mono<UserDatabaseModel> validUserOrError(@NonNull UserDatabaseModel userDatabaseModel) {
return (userDatabaseModel.getId() == null || userDatabaseModel.getId().isBlank())
? monoBadRequestError("User ID cannot be null or blank")
: Mono.defer(() -> Mono.just(userDatabaseModel));
}
private Mono<UserDatabaseModel> monoBadRequestError(@NonNull String message) {
return Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, message));
}这样,如果用户ID无效,错误将从validUserOrError()函数和所有后续操作,如map(),flatMap()等发出。将被跳过,从而导致该请求的Http错误请求错误。否则,来自服务层的结果(将用户保存到数据库)将被发送。我个人不使用spring webflux的@NotBlank注释,因为我发现它在某些情况下不兼容,而是使用我提供的结构。
发布于 2021-04-03 15:07:39
设置属性文件
server.error.include-message=always并设置@ControllerAdvice
@ControllerAdvice
public class GlobalErrorHandler {
@ExceptionHandler(WebExchangeBindException.class)
public Mono<ServerResponse> handlerBindException(WebExchangeBindException e) {
return Mono.error(e.getFieldError() == null ? e :
new ResponseStatusException(HttpStatus.BAD_REQUEST,
e.getFieldError().getDefaultMessage()));
}
}https://stackoverflow.com/questions/63125769
复制相似问题