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