Как использовать findAll () в CrudRepository, возвращающем List вместо Iterable - PullRequest
0 голосов
/ 07 июня 2019

Я хочу написать метод FindAll (), который возвращает список всех объектов Student. Но в CRUDRepository есть только Iterable <> findAll ().

Цель состоит в том, чтобы собрать всех учащихся в Список и передать их в API-контроллер, чтобы я мог получить всех учащихся с помощью http GET.

Как лучше всего преобразовать этот метод в List <> FindAll ()

В моем текущем коде метод findAll в StudentService дает мне найденные несовместимые типы: Iterable. Обязательно: Ошибка списка.

Услуги

@Service
@RequiredArgsConstructor
public class StudentServiceImpl implements StudentService {

    @Autowired
    private final StudentRepository studentRepository;

    //Incompatible types found: Iterable. Required: List
    public List<Student> findAll() {
        return studentRepository.findAll();
    }
}

Контроллер API

@RestController
@RequestMapping("/api/v1/students")

public class StudentAPIController {

    private final StudentRepository studentRepository;

    public StudentAPIController(StudentRepository studentRepository) {
        this.studentRepository = studentRepository;
    }

    @GetMapping
    public ResponseEntity<List<Student>> findAll() {
        return ResponseEntity.ok(StudentServiceImpl.findAll());
    }
}

StudentRepository

public interface StudentRepository extends CrudRepository<Student, Long> {

}

Ответы [ 3 ]

1 голос
/ 07 июня 2019

Два варианта:

  1. создать список из повторяемого в вашем сервисном методе и вернуть, как в Преобразовать Iterator в ArrayList

  2. переопределить метод пружин по умолчанию findAll() для возврата списка - см. https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html#repositories.custom-implementations

Если существует много служб, которые будут возвращать список, я бы порекомендовал второйвозможность настроить вас на извлечение логики, когда вам приходилось делать это несколько раз.

0 голосов
/ 08 июня 2019

Если вы наследуете StudentRepository от JpaRepository, у вас есть метод findAll(), возвращающий список.

public interface StudentRepository extends JpaRepository<Student, Long> {

}

Ссылка:

https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html#findAll--

0 голосов
/ 08 июня 2019

Я думаю, вы можете просто определить абстрактный метод List<Student> findAll() в интерфейсе StudentRepository

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