Java Spring引导端点返回对象,包括2个对象列表
我有一个简单的方法Java Spring引导端点返回对象,包括2个对象列表,java,spring-boot,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)
public ResponseEntity<List<Item>> findAllByParameters(@RequestBody ListofParameters listOfParameters) {
log.info("Find All items with given parameter");
return ResponseEntity.ok(itemRepository.findAllBy(listOfParameters));
}
我的参数列表现在看起来像这样,它只有一个字符串列表
@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种颜色,只匹配两种,我将不会得到缺少一种颜色的信息,只会得到两个对象的列表
问题是,我想知道哪些项目不匹配。我想好的解决方案是返回一个包含两个对象列表的对象,一个匹配给定颜色,另一个不匹配
有人知道怎么做吗
类似地,如果我尝试找到3种颜色,只匹配两种,我将不会得到缺少一种颜色的信息,只会得到两个对象的列表。
问题是,我想知道哪些项目不匹配
要知道丢失了哪些项目
假设数据库中包含蓝色和红色的项。
您的请求包含蓝色、红色和黄色。
输出您想要黄色,因为数据库中没有任何黄色的项
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());
}