Reactor REST Mono возвращает ScanAvailable: true - PullRequest
0 голосов
/ 17 декабря 2018

Я работал над микросервисом Java, который использует Reactor для упрощения асинхронных вызовов.На моей конечной точке у меня есть следующий код:

@HystrixCommand
@ApiOperation(value = "Resolve Dispute")
@PostMapping(consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE, path = "/resolve")
public Mono<RestResponse<RestResponseResult>> resolveDispute(@RequestBody ResolveDisputeRequest requestJson, @RequestParam("appToken") String appToken) {
    if (apiAppToken.equals(appToken)) {
        EnumsUtils.getEnumValue(DisputeReason.values(), requestJson.getResolutionType(), requestJson);
        return facebookApiService.resolveDispute(requestJson).single();
    } else {
        throw new InvalidTokenException(requestJson.getUserId());
    }
}

Который я бы ожидал вернуть объект

{
    result: true/false
}

Однако, проверяя код, я понимаю, что ответ выдандо того, как код завершит свой процесс.Ответ:

{
  "scanAvailable": true
} 

. Это заставляет меня поверить, что это связано с асинхронной природой Reactor, но не соответствует моим потребностям.

Как правильно использоватьРеактор для того, чтобы получить требуемый ответ?Я не хочу использовать метод block, который блокирует вызовы.

Заранее благодарен за любую предоставленную помощь.

Всего наилучшего,

Алехандро

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Я сталкиваюсь с некоторой проблемой с ткачеством aspectj.

Ответ {"scanAvailable":true} от mono.map(x -> joinPoint.proceed()), и он должен быть mono.flatMap(x -> (Mono) joinPoint.process()).

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

это реактивный код или непосредственный EnumsUtils.getEnumValue (DisputeReason.values ​​(), requestJson.getResolutionType (), requestJson);

...