首页 > 解决方案 > 无法从 Retrofit 回调返回 CompletableFuture.completedFuture

问题描述

弹簧靴2.2改装2

我需要创建异步 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(回调方法)成功后调用execute方法addProductToCart

但我在这一行得到编译错误:

return CompletableFuture.completedFuture(cart);

错误:

Cannot return a value from a method with void result type

标签: spring-bootretrofit2spring-async

解决方案


推荐阅读