我有以下错误,我不知道还能做什么来修复它,我寻找的一切都不起作用:
创建名为“citaController”的 bean 时出错:通过字段“citaRepository”表达的依赖关系不满足:创建在 com.example.demo.repository.CitaRepository 中定义的名为“citaRepository”的 bean 时出错。CitaRepository 在 GestionClinicaOdontologicaApplication 上声明的 @EnableJpaRepositories 中定义:不是托管类型:类 com.example.demo.entity.Cita
Cita 控制器:
package com.example.demo.controller;
`
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.groupingBy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.demo.config.AuthService;
import com.example.demo.entity.Cita;
import com.example.demo.entity.Odontologo;
import com.example.demo.repository.CitaRepository;
import com.example.demo.repository.OdontologoRepository;
@Controller
@RequestMapping(path = "/cita")
public class CitaController {
// Repositorio para acceder a las citas en la base de datos
@Autowired
private AuthService authService;
@Autowired
private CitaRepository citaRepository;
@Autowired
private OdontologoRepository odontologoRepository;
// Endpoint para crear una nueva cita
@PostMapping(path = "/new")
public @ResponseBody String nuevo(@RequestParam String fecha, @RequestParam LocalTime hora,
@RequestParam String motivo, @RequestParam String tratamiento, @RequestParam int cedula_paciente,
@RequestParam int id_odontologo) {
// Crear una nueva cita con los parámetros proporcionados
Cita c = new Cita();
c.setFecha(fecha);
c.setHora(hora);
c.setMotivo(motivo);
c.setTratamiento(tratamiento);
c.setCedula_paciente(cedula_paciente);
c.setId_odontologo(id_odontologo);
// Guardar la nueva cita en la base de datos
citaRepository.save(c);
return "Listo";
}
// Endpoint para mostrar el formulario de creación de nueva cita
@GetMapping("/new_frontend")
public String motrarFormularioNuevo() {
return "formularioNuevaCita";
}
// Endpoint para crear una nueva cita a través de un formulario web
@PostMapping("/new_frontend")
public String nuevo(@RequestParam String fecha, @RequestParam LocalTime hora, @RequestParam String motivo,
@RequestParam String tratamiento, @RequestParam int cedula_paciente, @RequestParam int id_odontologo,
Model modelo) {
Cita c = new Cita();
c.setFecha(fecha);
c.setHora(hora);
c.setMotivo(motivo);
c.setTratamiento(tratamiento);
c.setCedula_paciente(cedula_paciente);
c.setId_odontologo(id_odontologo);
citaRepository.save(c);
// Agregar un mensaje para mostrar en la vista de respuesta
modelo.addAttribute("mensaje", "Cita creada correctamente");
return "respuestaCreacionCita"; // Devolver la vista de respuesta
}
// Endpoint para listar todas las citas en formato JSON
@GetMapping(path = "/all")
public @ResponseBody Iterable<Cita> listarTodos() {
return citaRepository.findAll();
}
// Endpoint para listar todas las citas y mostrarlas en una vista web
@GetMapping(path = "/all_frontend")
public String listarTodos_frontend(Model modelo) {
Authentication authentication = authService.getUsuarioAutenticado();
if (authentication != null && authentication.isAuthenticated()) {
Object principal = authentication.getPrincipal();
// Obtener el ID del odontólogo autenticado
int idOdontologoAutenticado = obtenerIdOdontologo(principal);
// Filtrar las citas según el ID del odontólogo autenticado
ArrayList<Cita> listaFiltrada = (ArrayList<Cita>) ((ArrayList<Cita>) (citaRepository.findAll())).stream()
.filter(cita -> cita.getId_odontologo() == idOdontologoAutenticado).collect(Collectors.toList());
modelo.addAttribute("citas", listaFiltrada);
return "listadoCitas";
} else {
// Manejar usuario no autenticado
return "redirect:/login"; // Redireccionar a la página de inicio de sesión o manejar de acuerdo a lo
// apropiado
}
}
private int obtenerIdOdontologo(Object userDetails) {
if (userDetails instanceof UserDetails) {
UserDetails userDetails1 = (UserDetails) userDetails;
String username = userDetails1.getUsername();
Odontologo odontologo = odontologoRepository.findByEmail(username);
if (odontologo != null) {
return odontologo.getId();
}
}
return 0; // O lanzar una excepción apropiada si no se puede obtener el ID
}
@GetMapping(path = "/find")
public @ResponseBody Cita buscarId(@RequestParam int id) {
return citaRepository.findById(id).get();
}
@PostMapping(path = "/update/{id}")
public @ResponseBody String actualizar(@PathVariable int id, @RequestParam String fecha,
@RequestParam LocalTime hora, @RequestParam String motivo, @RequestParam String tratamiento,
@RequestParam int cedula_paciente, @RequestParam int id_odontologo) {
Cita c = buscarId(id);
c.setFecha(fecha);
c.setHora(hora);
c.setMotivo(motivo);
c.setTratamiento(tratamiento);
c.setCedula_paciente(cedula_paciente);
c.setId_odontologo(id_odontologo);
citaRepository.save(c);
return "Listo";
}
@GetMapping("/update_frontend/{id}")
public String mostrarFormularioCita(@PathVariable int id, Model model) {
Cita cita = buscarId(id);
model.addAttribute("cita", cita);
return "formularioActualizarCita";
}
@PostMapping("/update_frontend/{id}")
public String actualizarDesdeFrontend(@PathVariable int id, @RequestParam String fecha,
@RequestParam LocalTime hora, @RequestParam String motivo, @RequestParam String tratamiento,
@RequestParam int cedula_paciente, @RequestParam int id_odontologo, Model model) {
Cita c = buscarId(id);
c.setFecha(fecha);
c.setHora(hora);
c.setMotivo(motivo);
c.setTratamiento(tratamiento);
c.setCedula_paciente(cedula_paciente);
c.setId_odontologo(id_odontologo);
citaRepository.save(c);
model.addAttribute("mensaje", "Cita actualizada correctamente");
return "respuestaActualizacionCita";
}
@GetMapping("/delete/{id}")
public String mostrarConfirmacionEliminar(@PathVariable int id, Model model) {
Cita cita = citaRepository.findById(id).get();
model.addAttribute("cita", cita);
return "confirmarEliminarCita";
}
@PostMapping("/delete/{id}")
public String eliminar(@PathVariable int id) {
citaRepository.deleteById(id);
return "redirect:/cita/all_frontend";
}
// Endpoint para mostrar la agenda diaria de citas en una vista web
@GetMapping("/agenda-diaria")
public String mostrarAgendaDiaria(
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fecha, Model model) {
// Obtener la fecha actual si no se proporciona una fecha específica
LocalDate fechaActual = fecha != null ? fecha : LocalDate.now();
// Obtener las citas programadas para la fecha actual
List<Cita> citasDelDia = citaRepository.findByFecha(fechaActual.toString());
// Pasar las citas a la vista
model.addAttribute("fechaActual", fechaActual);
model.addAttribute("citas", citasDelDia);
return "agenda-diaria";
}
@GetMapping("/agenda-semanal")
public String mostrarAgendaSemanal(
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fecha, Model model) {
// Obtener la fecha inicial y final de la semana
LocalDate fechaInicio = getFechaInicioSemana(fecha);
LocalDate fechaFin = fechaInicio.plusDays(6);
// Obtener las citas programadas para la semana
List<Cita> citasSemana = citaRepository.findByFechaBetween(fechaInicio.toString(), fechaFin.toString());
// Agrupar las citas por fecha
Map<Object, List<Cita>> citasAgrupadas = citasSemana.stream()
.collect(groupingBy(cita -> LocalDate.parse(cita.getFecha(), DateTimeFormatter.ISO_DATE)));
// Pasar los datos a la vista
model.addAttribute("fechaInicio", fechaInicio);
model.addAttribute("fechaFin", fechaFin);
model.addAttribute("citasAgrupadas", citasAgrupadas);
return "agenda-semanal";
}
private LocalDate getFechaInicioSemana(LocalDate fecha) {
if (fecha == null) {
fecha = LocalDate.now();
}
// Obtener el lunes de la semana actual
return fecha.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
}
@GetMapping("/agenda-mensual")
public String mostrarAgendaMensual(
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate fecha, Model model) {
// Obtener el mes y año actual
YearMonth mesActual = fecha != null ? YearMonth.from(fecha) : YearMonth.now();
// Obtener las citas programadas para el mes actual
List<Cita> citasMes = citaRepository.findByFechaBetween(mesActual.atDay(1).toString(),
mesActual.atEndOfMonth().toString());
// Agrupar las citas por fecha
Map<Object, List<Cita>> citasAgrupadas = citasMes.stream()
.collect(Collectors.groupingBy(cita -> LocalDate.parse(cita.getFecha(), DateTimeFormatter.ISO_DATE)));
// Pasar los datos a la vista
model.addAttribute("mesActual", mesActual);
model.addAttribute("citasAgrupadas", citasAgrupadas);
return "agenda-mensual";
}
}`
Cita 实体:
`package com.example.demo.entity;
import java.time.LocalTime;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Cita {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private LocalTime hora;
private String motivo, tratamiento, fecha;
private int cedula_paciente, id_odontologo;
public int getCedula_paciente() {
return cedula_paciente;
}
public void setCedula_paciente(int cedula_paciente) {
this.cedula_paciente = cedula_paciente;
}
public String getFecha() {
return fecha;
}
public void setFecha(String fecha) {
this.fecha = fecha;
}
public LocalTime getHora() {
return hora;
}
public void setHora(LocalTime hora) {
this.hora = hora;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getMotivo() {
return motivo;
}
public void setMotivo(String motivo) {
this.motivo = motivo;
}
public String getTratamiento() {
return tratamiento;
}
public void setTratamiento(String tratamiento) {
this.tratamiento = tratamiento;
}
public int getId_odontologo() {
return id_odontologo;
}
public void setId_odontologo(int id_odontologo) {
this.id_odontologo = id_odontologo;
}
}`
Cita 存储库:
`package com.example.demo.repository;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.example.demo.entity.Cita;
@Repository
public interface CitaRepository extends CrudRepository<Cita, Integer> {
@Query("SELECT c FROM Cita c WHERE c.fecha = :fecha")
List<Cita> findByFecha(@Param("fecha") String fecha);
@Query("SELECT c FROM Cita c WHERE c.fecha BETWEEN :fechaInicio AND :fechaFin")
List<Cita> findByFechaBetween(@Param("fechaInicio") String fechaInicio, @Param("fechaFin") String fechaFin);
}`
我的应用程序:
`package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@ComponentScan(basePackages="com.example.demo")
@EntityScan("com.example.demo.entity")
@EnableJpaRepositories("com.example.demo.repository")
public class GestionClinicaOdontologicaApplication {
public static void main(String[] args) {
SpringApplication.run(GestionClinicaOdontologicaApplication.class, args);
}
}`
我已经尝试了一切,将路线放入应用程序中,更改citaController,删除东西,我不知道该怎么办了。
@SpringBootApplication
@EnableJpaRepositories("repositories")
@ComponentScan({"controllers", "repositories"})