Java Play Framework - Как составить 3 запроса CompletionStage и вернуть JSON - PullRequest
0 голосов
/ 04 декабря 2018

Я действительно новичок в использовании Java Play Framework, и у меня есть некоторые сомнения по поводу создания этого API.Мне нужно сделать 1 запрос к моей базе данных (чтобы проверить, получил ли токен реальный идентификатор пользователя), а затем 2 HTTP-запроса к внешней службе.Я хочу создать ответ, используя эту логику: мне нужно получить все рабочие места из списка рабочих из пользовательского кода (dni), а затем мне нужно создать ответ со всеми данными, подобными этому JSON ->

{
"status": "OK",
"error": "",
"result": [
    {
        "id_entorno": 1,
        "worker": {
            "id_worker": 654,
            "firstName": "Juanjo",
            "secondName": "Sosa"
        },
        "workplace": {
            "id_workplace": 1234,
            "description": "Edificio Centris",
            "latitude": 123.123,
            "longitude": 123.123,
            "street": "Glorieta Fernando Quiñones",
            "city": "Tomares",
            "state": "Andalucía",
            "country": "España"
        },
        "favorite": false
    },
    {
        "id_entorno": 2,
        "worker": {
            "id_worker": 654,
            "firstName": "Juan José",
            "secondName": "Sosa Osuna"
        },
        "workplace": {
            "id_workplace": 542,
            "description": "Edificio Plaza Mayor",
            "latitude": 21.123,
            "longitude": 12.123,
            "street": "Avenida San Juan",
            "city": "Madrid",
            "state": "Comunidad de Madrid",
            "country": "España"
        },
        "favorite": true
    }
]

}

А вот мой код ->

public CompletionStage<Result> getWorkplaces(Long idEnv) {
if(request().getHeaders().get(AUTH).isPresent()) {
    if(idEnv != 0 && idEnv != null){
        String token = request().getHeaders().get(AUTH).get().replace("Bearer ", "");
        String idUser = AuthorizationUtil.getUserFromJwt(jwtValidator, token);
        if (idUser != null) {
            CompletionStage<User> searchService = userRepository.findById(String.valueOf(idUser));
            CompletionStage<Result> result = searchService.thenComposeAsync(u -> {
                if (u != null) {
                    String dni = u.getDni();
                    if(dni != null){
                        // TODO ...
                        return thirdPartyWs.peopleLocator(idEnv, dni, Long.parseLong(idUser)).thenComposeAsync(workerStream -> {
                            if (workerStream != null) {
                                // TODO ...
                                workerStream.collect(Collectors.toList()).forEach(worker -> {
                                    Long workerId = worker.getIdWorker();
                                    List<ResponseGetWorkplaces> listaWorkplaces = new ArrayList<>();
                                    return thirdPartyWs.getWorkplaces(idEnv, workerId).thenApplyAsync(workplaceStream -> {
                                        if (workplaceStream != null) {
                                            workplaceStream.collect(Collectors.toList()).forEach(workplace -> {
                                                ResponseWorker resw = new ResponseWorker(worker.getIdWorker(), worker.getFirstName(), worker.getSecondName());
                                                ResponseWorkplace reswp = new ResponseWorkplace(workplace.getIdWorkplace(), workplace.getDescription(), workplace.getLatitude(), workplace.getLongitude(), workplace.getStreet(), workplace.getCity(), workplace.getState(), workplace.getCountry());
                                                //TODO ...
                                                ResponseGetWorkplaces res = new ResponseGetWorkplaces(idEnv, resw, reswp, false);
                                                listaWorkplaces.add(res);
                                            });
                                            return ok(JsonUtil.responseFromJsonNode(true, Json.toJson(listaWorkplaces), ""));
                                        } else {
                                            return notFound(JsonUtil.responseFromJsonNode(false, Json.toJson(ENTITY_NOT_FOUND), ""));
                                        }
                                    }, executionContext.current());
                                });
                            } else {
                                return CompletableFuture.supplyAsync(() -> notFound(JsonUtil.responseFromJsonNode(false, Json.toJson(ENTITY_NOT_FOUND), "")));
                            }
                        }, executionContext.current());
                    } else {
                        return CompletableFuture.supplyAsync(() -> badRequest(JsonUtil.responseFromJsonNode(false, Json.toJson(ERROR_EMPTY_DNI), "")));                            }
                } else {
                    return CompletableFuture.supplyAsync(() -> forbidden(JsonUtil.responseFromJsonNode(false, Json.toJson(ERROR_INVALID_TOKEN), "")));                        }
            }, executionContext.current());
            return result.thenApplyAsync(finishResult -> finishResult);
        } else {
            return CompletableFuture.supplyAsync(() -> forbidden(JsonUtil.responseFromJsonNode(false, Json.toJson(ERROR_INVALID_TOKEN), "")));
        }

        // TODO ...

    } else {
        return CompletableFuture.supplyAsync(() -> badRequest(JsonUtil.responseFromList(false, new ArrayList<>(), INVALID_PARAMETERS)));
    }
} else {
    return CompletableFuture.supplyAsync(() -> forbidden(JsonUtil.responseFromJsonNode(false, Json.toJson(ERROR_NOT_AUTH), "")));
}

}

У меня есть ошибки, которые говорят: «Неожиданное возвращаемое значение» и «Отсутствует инструкция возврата».Что я делаю неправильно?Может кто-нибудь помочь мне, пожалуйста?

...