Как получить моно из @PathVariable без блокировки - PullRequest
0 голосов
/ 16 мая 2019

Привет, я хотел бы знать, как в моем контроллере без преобразования кода блокировки из двух аргументов в класс Mono класса DTO.

Предположим, у меня есть контроллер, как показано ниже:

@RestController
@RequiredArgsConstructor
class GithubRepositoryEndpoint {

    private final GithubService githubService;

    @GetMapping("/repositories/{owner}/{repositoryName}")
    Mono<RepoDetailsResponseDTO> getRepositoryDetails(@PathVariable("owner") String owner,
                                                      @PathVariable("repositoryName") String repositoryName) {
        return githubService.getRepositoryDetails(Mono.just(new RepoDetailsRequestDTO(owner, repositoryName)));
    }
}

Я думаю, что эта строка блокирует: Mono.just (новый RepoDetailsRequestDTO (владелец, имя репозитория)

и вот класс DTO:


@Data
@Builder
@AllArgsConstructor
public class RepoDetailsRequestDTO {
    private String owner;
    private String repositoryName;
}

Мой сервис не блокирует:

@Slf4j
@RequiredArgsConstructor
public class GithubService {

    private final GithubClient githubClient;
    private final RequestValidator requestValidator;
    private final DomainMapper domainMapper;

    public Mono<RepoDetailsResponseDTO> getRepositoryDetails(Mono<RepoDetailsRequestDTO> request) {
        return request.map(requestValidator::validate)
                .map(domainMapper::mapFromDto)
                .flatMap(ownerAndRepoName -> githubClient.fetchRepositoryDetails(ownerAndRepoName._1, ownerAndRepoName._2))
                .onErrorResume(exc -> Mono.error(new FetchRepoDetailsException(exc.getMessage(), exc)));
    }


}

1 Ответ

1 голос
/ 19 мая 2019

линия

Mono.just(new RepoDetailsRequestDTO(owner, repositoryName))

не блокирует. Это просто вызов конструктора. Он не использует какие-либо блокирующие API (например, io / file / network). Оба параметра owner и repositoryName могут быть безопасно доступны, поскольку они уже содержат проанализированные переменные пути.

...