Log Spring webflux 类型 - Mono 和 Flux
Posted
技术标签:
【中文标题】Log Spring webflux 类型 - Mono 和 Flux【英文标题】:Log Spring webflux types - Mono and Flux 【发布时间】:2019-05-18 18:50:56 【问题描述】:我是 spring 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);
【问题讨论】:
您能否详细说明一下代码示例的问题?请参阅***.com/help/mcve 以获得一些帮助。 添加了代码。 【参考方案1】:你可以这样试试。 如果你想添加日志,你可以使用 .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);
)
【讨论】:
谢谢。我达到了一定程度。你能检查一下这个***.com/questions/53852733/… 我使用 loginBOMono.log("", Level.INFO, true) 但它没有记录任何内容。 如果您在此链接中谈论反应式编程,***.com/questions/53852733/… 并不是反应式编程的最佳示例。如果你想记录你可以使用 .map 并使用 Spring boot Log 如果你想异步你可以使用 EmmiterProcessor 创建一个 util 如果你想要简单的日志你可以使用 reactor .log() 操作符 我对响应式编程很陌生。请您纠正我在***.com/questions/53852733/…中的错误 我没有完全理解你的代码,我认为最好使用带有错误代码的 ResponseEntity 而不是抛出错误以上是关于Log Spring webflux 类型 - Mono 和 Flux的主要内容,如果未能解决你的问题,请参考以下文章
Spring Webflux Webclient |内容类型标题设置问题
如何绕过spring webflux security中的一些url?
Spring WebFlux - bodyType=org.springframework.web.multipart.MultipartFile 不支持内容类型“application/xml”