java - Spring Data JPA 和 Feign 的组合映射

标签 java spring-data-jpa netflix-eureka netflix-zuul spring-cloud-feign

我有一个 ShopMicroService、一个 CustomerMicroService 和一个 CartMicroService

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();

ShopController:

@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 请求路由到 Controller 的特定处理程序方法。因此,你不能“返回两个方法”。

但是,如果我理解正确的话,您想加入两个列表并将它们返回给客户端 - 如果我错了,请纠正我:) 为此,您可以使用 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;
   }

但我建议使用包装对象来返回两种不同的对象类型,而不是将它们返回到单个列表中。您可能会发现从列表中检索对象时遇到问题,这些对象不属于同一实现(转换等)

关于java - Spring Data JPA 和 Feign 的组合映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55289222/

相关文章:

java - 可能是 line.containes() 在 Android 中缺少搜索词吗?

java - Spring : can't persist entity annotated with @JsonIgnore

微服务 - 服务发现和服务网关之间的确切区别是什么?

java - java中的列表字符串列表

java - 持久性单元的多次登录?

java - CrudRepository findById 不返回 java.util。选修的

java - 使用 Spring Data 和 Hibernate 的 Spring MVC 分页

spring cloud gateway异常索引错误的权限中存在非法字符

netflix-eureka - Eureka 服务器 :8002 - was unable to send heartbeat

java - RMI 和 JMX 套接字工厂