Как заставить метод findAll () работать с объектом Iterable - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь написать метод в слое сервиса, который возвращает список объектов, чтобы я мог передать его моему контроллеру API. Мой метод findAll () выдает мне ошибку: Найдены несовместимые типы: итерируемые. Обязательно: список. Поэтому я подумал об использовании Set вместо List, но это дает мне следующее: Невозможно определить аргументы (невозможно разрешить конструктор).

Я понятия не имею, что я делаю здесь неправильно и почему мой ученический объект рассматривается как итерируемый. Любая помощь будет принята с благодарностью!

Мой код выглядит следующим образом:

ServiceImpl

@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();
    }

    //Cannot infer arguments (unable to resolve constructor)
    public Set<Student> getStudents()
    {
        Set<Student> students = new HashSet<>(studentRepository.findAll());
        return students;
    }

    public ArrayList<Student> getStudentsList(){
        return (ArrayList<Student>) this.studentRepository.findAll();
    }
}

Услуги

public interface StudentService {

    List<Student> findAll();
    Set<Student> getStudents();
    ArrayList<Student> getStudentsList()


}

Контроллер API

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

public class StudentAPIController {

    private final StudentRepository studentRepository;

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

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

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

Обычный StudentController

@Controller
@RequestMapping("/s")
public class StudentController {

    private final StudentRepository studentRepository;

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

    @GetMapping
    public ModelAndView list(){
        Iterable<Student> students = this.studentRepository.findAll();
        return new ModelAndView("students/list" , "students", students);
    }

    @GetMapping("{id}")
    public ModelAndView view(@PathVariable("id") Student student) {
        return new ModelAndView("students/view", "student", student);
    }
}

StudentRepository

public interface StudentRepository extends CrudRepository<Student, Long> {

}

1 Ответ

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

В слое JPA или Dao используйте вот так

public List<T> findAll() {
            return entityManager.createQuery("your query").getResultList();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...