Я пытаюсь написать метод в слое сервиса, который возвращает список объектов, чтобы я мог передать его моему контроллеру 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> {
}