Типы веб-потока Log Spring - Mono и Flux - PullRequest
0 голосов
/ 18 декабря 2018

Я новичок в весне 5.

1) Как я могу регистрировать параметры метода, которые являются типами Mono и Flux, не блокируя их?

2) Как отобразить модели на уровне APIБизнес-объект на сервисном уровне с помощью Map-struct?

Редактировать 1: У меня есть этот императивный код, который я пытаюсь преобразовать в реактивный код.В данный момент проблема компиляции связана с введением Mono в аргументе.

    public Mono<UserContactsBO> getUserContacts(Mono<LoginBO> loginBOMono)
    {

     LOGGER.info("Get contact info for login: {}, and client: {}", loginId, clientId);

    if (StringUtils.isAllEmpty(loginId, clientId)) {
      LOGGER.error(ErrorCodes.LOGIN_ID_CLIENT_ID_NULL.getDescription());
      throw new ServiceValidationException(
          ErrorCodes.LOGIN_ID_CLIENT_ID_NULL.getErrorCode(),
          ErrorCodes.LOGIN_ID_CLIENT_ID_NULL.getDescription());
    }

    if (!loginId.equals(clientId)) {

      if (authorizationFeignClient.validateManagerClientAccess(new LoginDTO(loginId, clientId))) {
        loginId = clientId;
      } else {
        LOGGER.error(ErrorCodes.LOGIN_ID_VALIDATION_ERROR.getDescription());

        throw new AuthorizationException(
            ErrorCodes.LOGIN_ID_VALIDATION_ERROR.getErrorCode(),
            ErrorCodes.LOGIN_ID_VALIDATION_ERROR.getDescription());
      }
    }

    UserContactDetailEntity userContactDetail = userContactRepository.findByLoginId(loginId);
    LOGGER.debug("contact info returned from DB{}", userContactDetail);
    //mapstruct to map entity to BO
    return contactMapper.userEntityToUserContactBo(userContactDetail);
  }

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете попробовать вот так.Если вы хотите добавить журналы, вы можете использовать .map и добавлять журналы там.если фильтры не пройдены, он вернется пустым, вы можете получить его с swichifempty

loginBOMono.filter(loginBO -> !StringUtils.isAllEmpty(loginId, clientId))
          .filter(loginBOMono1 -> loginBOMono.loginId.equals(clientId))
          .filter(loginBOMono1 -> authorizationFeignClient.validateManagerClientAccess(new LoginDTO(loginId, clientId)))
          .map(loginBOMono1 -> {
              loginBOMono1.loginId = clientId;
              return loginBOMono1;
          })
          .flatMap(o -> {
             return userContactRepository.findByLoginId(o.loginId);
          })
...