弹簧靴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