如何在使用 Spring Boot & Spring Data Jpa 时使用 Rest Service
How to use Rest Service while using Spring Boot & Spring Data Jpa
我正在使用 spring 数据 jpa 为休息服务开发 spring 启动应用程序。我跟着老师看了很多答案,但我无法修复我的休息服务。
这里是application.class
package tr.kasim.Application;
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
@EnableJpaRepositories("tr.kasim.Dao")
@EntityScan("tr.kasim.Model")
@ComponentScan({"tr.kasim.Service", "tr.kasim.Application" })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是`restcontroller.class
package tr.kasim.Controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import tr.kasim.Service.PersonelService;
import tr.kasim.Model.Personel;
@RestController
public class STRestController {
@Autowired
public PersonelService personelService;
@RequestMapping(value = "/api/personels", method = RequestMethod.GET)
public ResponseEntity<List<Personel>> getPersonels(){
List<Personel> personels = personelService.findAll();
return ResponseEntity.ok().body(personels);
}
}
`
这里是Service.class`
package tr.kasim.Service;
import java.util.List;
import tr.kasim.Model.Personel;
public interface PersonelService {
List<Personel> findAll();
}
`
这里是ServiceImplemantion.class
package tr.kasim.Service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tr.kasim.Dao.PersonelDao;
import tr.kasim.Model.Personel;
@Service
public class PersonelServiceImpl implements PersonelService {
@Autowired
private PersonelDao personelDao;
@Override
@Transactional
public List<Personel> findAll() {
return personelDao.findAll();
}
}
这里是Dao.class
package tr.kasim.Dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import tr.kasim.Model.Personel;
@Repository
public interface PersonelDao extends JpaRepository<Personel, Long> {
List<Personel> findAll();
}
最后是我的 application.properties
#MySql Connection
spring.datasource.url=jdbc:mysql://localhost:3306/exampleproject?verifyServerCertificate=false&useSSL=true
spring.datasource.username=root
spring.datasource.password=*******
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#Jpa/Hibernate
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#Logging
logging.file=staffTracking.log
logging.level.org.springframework.web=debug
我不确定 componentScan。当我阅读答案时,我发现有人提到过它,但我试过了,但还是一无所获。请告诉我我失败的地方。最好的问候。
我更新了 Application.class,现在我可以部署项目,但其余服务仍然无法正常工作。
你是如何尝试的ComponentScan
?这里的问题似乎是你有这样的包结构:
tr.kasim.Application
- Application.java
tr.kasim.Service
- PersonelService.java
- PersonelServiceImpl.java
tr.kasim.Dao
- PersonelDao.java
既然 mainClass
在 tr.kasim.Application
中,它将扫描该包内的 bean 定义(或 tr.kasim.Application
中的子包)。所以,
要么将 mainClass
移到 tr.kasim
之类的父包中,要么
使用@ComponentScan({ "tr.kasim.Dao", "tr.kasim.Service", "tr.kasim.Application" })
等
-- 更新--
根据目前的讨论,我建议采用第一个选项,因为这样可以减少手动启用实体、存储库等扫描的工作量。
我正在使用 spring 数据 jpa 为休息服务开发 spring 启动应用程序。我跟着老师看了很多答案,但我无法修复我的休息服务。
这里是application.class
package tr.kasim.Application;
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
@EnableJpaRepositories("tr.kasim.Dao")
@EntityScan("tr.kasim.Model")
@ComponentScan({"tr.kasim.Service", "tr.kasim.Application" })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是`restcontroller.class
package tr.kasim.Controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import tr.kasim.Service.PersonelService;
import tr.kasim.Model.Personel;
@RestController
public class STRestController {
@Autowired
public PersonelService personelService;
@RequestMapping(value = "/api/personels", method = RequestMethod.GET)
public ResponseEntity<List<Personel>> getPersonels(){
List<Personel> personels = personelService.findAll();
return ResponseEntity.ok().body(personels);
}
}
`
这里是Service.class`
package tr.kasim.Service;
import java.util.List;
import tr.kasim.Model.Personel;
public interface PersonelService {
List<Personel> findAll();
}
`
这里是ServiceImplemantion.class
package tr.kasim.Service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tr.kasim.Dao.PersonelDao;
import tr.kasim.Model.Personel;
@Service
public class PersonelServiceImpl implements PersonelService {
@Autowired
private PersonelDao personelDao;
@Override
@Transactional
public List<Personel> findAll() {
return personelDao.findAll();
}
}
这里是Dao.class
package tr.kasim.Dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import tr.kasim.Model.Personel;
@Repository
public interface PersonelDao extends JpaRepository<Personel, Long> {
List<Personel> findAll();
}
最后是我的 application.properties
#MySql Connection
spring.datasource.url=jdbc:mysql://localhost:3306/exampleproject?verifyServerCertificate=false&useSSL=true
spring.datasource.username=root
spring.datasource.password=*******
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#Jpa/Hibernate
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#Logging
logging.file=staffTracking.log
logging.level.org.springframework.web=debug
我不确定 componentScan。当我阅读答案时,我发现有人提到过它,但我试过了,但还是一无所获。请告诉我我失败的地方。最好的问候。
我更新了 Application.class,现在我可以部署项目,但其余服务仍然无法正常工作。
你是如何尝试的ComponentScan
?这里的问题似乎是你有这样的包结构:
tr.kasim.Application
- Application.java
tr.kasim.Service
- PersonelService.java
- PersonelServiceImpl.java
tr.kasim.Dao
- PersonelDao.java
既然 mainClass
在 tr.kasim.Application
中,它将扫描该包内的 bean 定义(或 tr.kasim.Application
中的子包)。所以,
要么将
mainClass
移到tr.kasim
之类的父包中,要么使用
@ComponentScan({ "tr.kasim.Dao", "tr.kasim.Service", "tr.kasim.Application" })
等
-- 更新--
根据目前的讨论,我建议采用第一个选项,因为这样可以减少手动启用实体、存储库等扫描的工作量。