Spring boot endpoint, возвращающий объект, включающий 2 списка объектов - PullRequest
0 голосов
/ 13 июня 2018

У меня есть простой метод

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 голосов
/ 13 июня 2018

Аналогично, если я попытаюсь найти 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());


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...