У меня есть МагазинМикроСервис, КлиентМикроСервис и КорзинаМикроСервис.
ShopMicroService должен работать как шлюз API и иметь возможность контролировать все остальные службы. Они подключены и маршрутизируются с помощью Netflix Zuul.
Я хочу иметь возможность звонить, например. localhost:8080/list и просматривать данные как из CustomerMicroService, так и из CartMicroService. Но я также не могу вернуть два метода в моем ShopController. Как я могу обойти это?
Shop2CartConnector:
@FeignClient("cartmicroservice")
public interface Shop2CartConnectorRequester {
@GetMapping("/list")
public List<?> getCart();
Shop2CustomerConnector:
@FeignClient("customermicroservice")
public interface Shop2CustomerConnectorRequester {
@GetMapping("/list")
public List<?> getCustomer();
МагазинКонтроллер:
@ComponentScan
@RestController
public class ShopController {
final Shop2CustomerConnectorRequester shop2CustomerConnectorRequester;
final Shop2CartConnectorRequester shop2CartConnectorRequester;
@Autowired
public ShopController(Shop2CustomerConnectorRequester shop2CustomerConnectorRequester,
Shop2CartConnectorRequester shop2CartConnectorRequester) {
this.shop2CustomerConnectorRequester = shop2CustomerConnectorRequester;
this.shop2CartConnectorRequester = shop2CartConnectorRequester;
}
@GetMapping("/getCustomer")
public List<?> getCustomer() {
return shop2CustomerConnectorRequester.getCustomer();
}
@GetMapping("/getCart")
public List<?> getCart() {
return shop2CartConnectorRequester.getCart();
}
Я уже пытался вызвать только один метод и использовать оба метода, но он по-прежнему показывает, конечно, только список, который я возвращаю.




По сути, когда вы делаете вызов API, request handler вашего приложения будет направлять входящие HTTPS-запросы на определенные методы обработчиков ваших контроллеров. Следовательно, вы не можете «вернуть два метода».
Но, если я вас правильно понял, вы хотите объединить два списка и вернуть их клиенту - поправьте меня, если я ошибаюсь :) Для этого вы можете использовать Stream API, который предоставляет метод concat. Например
@RestController
public class ShopController {
final Shop2CustomerConnectorRequester shop2CustomerConnectorRequester;
final Shop2CartConnectorRequester shop2CartConnectorRequester;
@Autowired
public ShopController(Shop2CustomerConnectorRequester shop2CustomerConnectorRequester,
Shop2CartConnectorRequester shop2CartConnectorRequester) {
this.shop2CustomerConnectorRequester = shop2CustomerConnectorRequester;
this.shop2CartConnectorRequester = shop2CartConnectorRequester;
}
@GetMapping("/listAll")
public List getAllLists() {
List<Customer> customerList = hop2CustomerConnectorRequester.getCustomer();
List<Cart> cartList = hop2CartConnectorRequester.getCart();
List<?> list = Stream.concat(customerList.stream(), cartList.stream()).collect(Collectors.toList());
return list;
}
Но я бы рекомендовал использовать объект-оболочку для возврата двух разных типов объектов, а не возвращать их в один список. Вы можете столкнуться с проблемами при извлечении объектов из списка, объекты которых не принадлежат одной и той же реализации (приведение типов и т. д.).