在 MongoTemplate 上获取 NullPointerException
Getting NullPointerException on MongoTemplate
我正在使用 Spring + jersey + mongodb(在 mongolab 上)+ maven
Web 服务部分工作正常,但是当我尝试连接到数据库时,我在 MongoTemplate 上遇到空指针异常我已经尝试了很多解决方案,但 none 工作正常
这是我的代码:
应用程序上下文:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd">
<context:component-scan base-package="com.jersey" />
<!-- Factory bean that creates the Mongo instance -->
<mongo:mongo host="ds031972.mongolab.com" port="31972" id="mongo" />
<mongo:db-factory dbname="proyecto_desarrollo" username="danprat" password="19693058" mongo-ref="mongo" id="mongoDbFactory" />
<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
</beans>
这里是使用 mongoTemplate
的 dao
public class UserManager {
public static final String COLLECTION_NAME = "user";
@Autowired
private MongoTemplate mongoTemplate;
public List<User> getUsers() {
return mongoTemplate.findAll(User.class , COLLECTION_NAME);
}
}
以防万一这是服务文件
@Path("/users")
public class UserService {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers(){
UserManager userManager = new UserManager();
return userManager.getUsers();
}
}
mongolab 提供的连接 uri:
mongodb://<dbuser>:<dbpassword>@ds031972.mongolab.com:31972/proyecto_desarrollo
我相信 MongoTemplate 没有正确注入,但不知道为什么我是 spring 和 mongo
的新手
编辑
由于给出的答案,这是一个有效的方法:
@Component
public class UserManager {
public static final String COLLECTION_NAME = "user";
@Autowired
private MongoTemplate mongoTemplate;
public List<User> getUsers() {
return mongoTemplate.findAll(User.class , COLLECTION_NAME);
}
}
@Path("/users")
@Component
public class UserService {
@Autowired
UserManager userManager;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers(){
return userManager.getUsers();
}
}
xml:
<context:component-scan base-package="com.jersey.persistence" />
<context:component-scan base-package="com.jersey.services" />
<context:component-scan base-package="com.jersey.commons.entities" />
<!-- Factory bean that creates the Mongo instance -->
<mongo:mongo host="ds031972.mongolab.com" port="31972" id="mongo" />
<mongo:db-factory dbname="proyecto_desarrollo" username="danprat" password="19693058" mongo-ref="mongo" id="mongoDbFactory" />
<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
我认为您没有像 UserManager 那样设置应用程序上下文来正确扫描 类。 UserManager 似乎没有使用必需的 @Component 注释进行注释。
另外,您可能没有扫描自己的包来进行注入。我明白了
<context:component-scan base-package="com.jersey" />
您需要添加 UserManager 所在的包,以及您需要扫描的任何其他内容。您可以通过附加以逗号分隔的附加碱基 类 来实现。
我正在使用 Spring + jersey + mongodb(在 mongolab 上)+ maven
Web 服务部分工作正常,但是当我尝试连接到数据库时,我在 MongoTemplate 上遇到空指针异常我已经尝试了很多解决方案,但 none 工作正常
这是我的代码:
应用程序上下文:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd">
<context:component-scan base-package="com.jersey" />
<!-- Factory bean that creates the Mongo instance -->
<mongo:mongo host="ds031972.mongolab.com" port="31972" id="mongo" />
<mongo:db-factory dbname="proyecto_desarrollo" username="danprat" password="19693058" mongo-ref="mongo" id="mongoDbFactory" />
<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
</beans>
这里是使用 mongoTemplate
的 daopublic class UserManager {
public static final String COLLECTION_NAME = "user";
@Autowired
private MongoTemplate mongoTemplate;
public List<User> getUsers() {
return mongoTemplate.findAll(User.class , COLLECTION_NAME);
}
}
以防万一这是服务文件
@Path("/users")
public class UserService {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers(){
UserManager userManager = new UserManager();
return userManager.getUsers();
}
}
mongolab 提供的连接 uri:
mongodb://<dbuser>:<dbpassword>@ds031972.mongolab.com:31972/proyecto_desarrollo
我相信 MongoTemplate 没有正确注入,但不知道为什么我是 spring 和 mongo
的新手编辑
由于给出的答案,这是一个有效的方法:
@Component
public class UserManager {
public static final String COLLECTION_NAME = "user";
@Autowired
private MongoTemplate mongoTemplate;
public List<User> getUsers() {
return mongoTemplate.findAll(User.class , COLLECTION_NAME);
}
}
@Path("/users")
@Component
public class UserService {
@Autowired
UserManager userManager;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<User> getUsers(){
return userManager.getUsers();
}
}
xml:
<context:component-scan base-package="com.jersey.persistence" />
<context:component-scan base-package="com.jersey.services" />
<context:component-scan base-package="com.jersey.commons.entities" />
<!-- Factory bean that creates the Mongo instance -->
<mongo:mongo host="ds031972.mongolab.com" port="31972" id="mongo" />
<mongo:db-factory dbname="proyecto_desarrollo" username="danprat" password="19693058" mongo-ref="mongo" id="mongoDbFactory" />
<!-- MongoTemplate for connecting and quering the documents in the database -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
我认为您没有像 UserManager 那样设置应用程序上下文来正确扫描 类。 UserManager 似乎没有使用必需的 @Component 注释进行注释。
另外,您可能没有扫描自己的包来进行注入。我明白了
<context:component-scan base-package="com.jersey" />
您需要添加 UserManager 所在的包,以及您需要扫描的任何其他内容。您可以通过附加以逗号分隔的附加碱基 类 来实现。