【发布时间】:2017-04-09 01:44:52
【问题描述】:
我正在编写一个带有基于 jersey 的 REST 服务的 Spring Boot 应用程序。
我的仓库界面如下
@Repository
public interface ConnectionRepository extends CrudRepository<Connection, Integer>
{
}
我的REST服务如下
@Component
@Path("/conn")
public class ConnectionService
{
@Autowired
private ConnectionRepository cer;
@GET
@Path("/{id}/")
@Produces(MediaType.APPLICATION_JSON)
public Response getSpConnection(@PathParam("id") String tid) throws Exception
{
Gson gson = new Gson();
if(cer == null)
{
return Response.status(Response.Status.OK).entity("Hello World").build();
}
Connection conendpoint = cer.find(tid);
if(conendpoint == null)
{
return Response.status(Response.Status.NOT_FOUND).build();
}
else
{
String jsonConn = gson.toJson(conendpoint);
return Response.status(Response.Status.OK).entity(jsonConn).build();
}
}
}
应用程序.java
@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan
@Component
@PropertySource("classpath:/application.properties")
@Import(PersistenceContext.class)
public class Application extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(applicationClass);
}
private static Class<Application> applicationClass = Application.class;
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
PersistenceContext 包含数据源和其他 bean 的信息。
每当我访问此 REST 服务时,我都会将 ConnectionRepository 设为 null,并且响应是“Hello World”。我正在使用spring-boot-starter-web、spring-boot-starter-jersey 和spring-boot-starter-data-jpa。
我错过了什么?
【问题讨论】:
-
确保ConnectionRepository & ConnectionService的包是Application.java的同一个包或子包
-
显示您的应用程序配置。您应该使用
@SpringBootApplication注释,将存储库与带注释的类放在同一个包中,并从接口中删除@Repository注释。还要确保配置了数据源,否则将不会启用 JPA 自动配置。 -
@lenicliu - Application.java 位于 com.example.connection 包中,ConnectionRepository 位于 com.example.connection.repositories 中,ConnectionService 位于 com.example.connection.rest 中
标签: rest spring-boot spring-data