Spring引导端点返回对象,包括2个对象列表

时间:2018-06-13 06:52:28

标签: java spring-boot

我有一个简单的方法

public ResponseEntity<List<Item>> findAllByParameters(@RequestBody ListofParameters listOfParameters) {
    log.info("Find All items with given parameter");
    return ResponseEntity.ok(itemRepository.findAllBy(listOfParameters));
}

我的参数列表看起来像这样(现在只有1个字符串列表)

@Getter
@Setter
    public class ListofParameters {

    @NotNull
    private List<String> colors;

我的存储库使用以下参数过滤数据库记录:

public interface ItemRepository extends CrudRepository<Item, String> {

    @Query("SELECT it FROM Item it WHERE (it.color IS NULL OR it.color IN (:#{#listOfParameters.colors}))")
    List<Item> findAllBy(@Param("listOfParameters") ListOfParameters listOfParameters);
}

现在,当参数匹配时,我会返回完整的对象列表,否则返回空列表。

类似地,如果我尝试找到3种颜色并且只匹配两种颜色,我将不会获得有关丢失的颜色的信息(只需获取两个对象的列表)。

问题是我想知道哪些项目不匹配。认为好的解决方案是返回一个包含两个对象列表的对象(一个匹配给定颜色,另一个不匹配)

有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

  

类似地,如果我尝试找到3种颜色并且只匹配两种颜色,我将不会获得有关丢失的颜色的信息(只需获取两个对象的列表)。   问题是我想知道哪些项目不匹配。

要知道缺少哪些项目,

假设,在数据库中包含颜色为(&#34;蓝色&#34;和&#34;红色&#34;)的项目。  您的请求包含(&#34;蓝色&#34;,&#34;红色&#34;和&#34;黄色&#34;)的颜色。  你想要的输出&#34;黄色&#34; (因为数据库没有&#34;黄色&#34;颜色)的任何项目

public void myMethod(){
  ListOfParameters listOfParameters = new ListOfParameters();
  listOfParameters.setColors(Arrays.asList("blue", "red", "yellow"));

   // items with "red" and "blue" would return
  List<item> items =  ItemRepository.findAllBy(listOfParameters);


 // convert List<item> into List<String> having color "red" and "blue" 
 List<String> includeColors =    items.stream().map(Item.getColor()).collect(Collectors.toList());


  // remove common color
  listOfParameters.getColors().removeAll(includeColors)

  o/p  [yellow]


  s.o.p(listOfParameters.getColors());


}