来自 2 个不相关对象的 List<Object> 仅显示一个对象作为结果

问题描述

我想在 Postman 中使用本机查询显示来自 2 个不相关对象的结果,如下所示:

    @Query(value = "select * from product p where p.id like concat('%',:productId,'%') ",nativeQuery = true)
    List<Product> findProductById(String productId);

    @Query(value = "select * from customer c where c.id like concat('%',:id,'%')",nativeQuery = true)
    List<Customer> findCustomerById(String id);

我想用条件添加他们的结果:

  • 如果 productId 为空,我只想显示来自 List<Customer> 的结果,反之亦然
  • 如果两者都为空/不为空,则应显示查询、产品和客户的结果,如下所示:
    @Override
    public List<Object> findById(String customerId,String productId) {
        List<Object> obj = new ArrayList<>();
        if(customerId.isEmpty()){
            obj.addAll(productRepository.findProductById(productId));
        } else if(productId.isEmpty()){
            obj.addAll(customerRepository.findCustomerById(customerId));
        } else {
            obj.addAll(productRepository.findProductById(productId));
            obj.addAll(customerRepository.findCustomerById(customerId));
        }
        return obj;
    }

这是我的控制器:

    @GetMapping("/custom")
    public List<Object> findById(@RequestParam(name = "customer") String customer,@RequestParam(name = "product") String product){
        return service.findById(customer,product);
    }

然而,在 Postman 中,当两者都为空时,它们只显示来自 List<Product> 的结果。有没有办法同时显示两者?

解决方法

您可以为此使用地图吗? 只需使用地图而不是列表即可。

Map<String,List<Object>> foo = new HashMap<String,List<Object>>();
List<Product> list = new ArrayList<Product>();
list.add("key1_value1");
list.add("key1_value2");
foo.put("key1",list);
List<Customer> list2 = new ArrayList<Customer>();
list2.add("key1_value1");
list2.add("key1_value2");
foo.put("key2",list2);