Log Spring webflux类型-单声道和助焊剂

时间:2018-12-18 11:02:02

标签: spring logging reactive-programming spring-webflux project-reactor

我是春季5的新手。

1)如何在不阻塞的情况下记录Mono和flux类型的方法参数?

2)如何使用Map-struct将API层的模型映射到服务层的业务对象?

修改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 :(得分:0)

您可以尝试这样。 如果要添加日志,则可以使用.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);
          })