Привет, я хотел бы знать, как в моем контроллере без преобразования кода блокировки из двух аргументов в класс 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)));
}
}