Не удается вернуть CompletableFuture.completedFuture из обратного вызова Retrofit - PullRequest
0 голосов
/ 20 апреля 2020

Spring boot 2.2 Retrofit 2

Мне нужно создать асин c http запрос. А после возврата результат перенаправить на redirect:/cart

Ее мой контроллер:

 @Autowired
    private OrderService orderService;

    @PostMapping(value = "/productEntry")
    public String submitProductEntry(ProductEntry productEntry, Model model) {
        try {
            orderService.addProductToCart(productEntry);
        } catch (InterruptedException e) {
            logger.error(e);
        }
        return "redirect:/cart";
    }

Вот мой сервис:

@Service
public class OrderService {

    private static Logger logger = LogManager.getLogger(OrderService.class);

    @Async
    public CompletableFuture<Cart> addProductToCart(ProductEntry productEntry) throws InterruptedException {
        logger.info("addProductToCart: productEntry = " + productEntry);
        TransportService.addProductToCart(productEntry, new DefaultRestClientCallback<JsonElement>() {
            @Override
            public void onSuccess(Response<JsonElement> response) {
                //super.onSuccess(response);
                JsonElement responseJson = response.body();
                logger.info("addProductToCart: onSuccess: responseJson = " + responseJson);
                Cart cart = GsonUtil.gson.fromJson(responseJson, Cart.class);
                logger.info("addProductToCart: cart = " + cart);
                return CompletableFuture.completedFuture(cart);
            }

            @Override
            public void onError(ErrorResponse errorResponse) {
                //super.onError(errorResponse);
                logger.error("addProductToCart: error = " + errorResponse);
            }
        });

    }

}

А вот мой транспортный уровень:

public static void addProductToCart(ProductEntry productEntry, Callback<JsonElement> callback ) {
        JsonObject json = new JsonObject();
        json.addProperty("product", GsonUtil.gson.toJson(productEntry.getProduct()));
        json.addProperty("quantity", 
        logger.info("addProductToCart: json = " + json);
        Call<JsonElement> call = restClient.addProductToCart(ORDER_CART_ADD_PRODUCT, json);
        // asynchronously
        call.enqueue(callback);
    }

Метод onSuccess (метод обратного вызова) вызов после успешного выполнения метода addProductToCart

Но я получаю ошибку компиляции в этой строке:

return CompletableFuture.completedFuture(cart);

Ошибка:

Cannot return a value from a method with void result type
...