[英]How to retrieve file from database for use by front-end code? (rest using java and jersey)
[英]Retrieve data from database with rest (jersey)
我正在嘗試使用Spring jdbc和Jersey從mysql數據庫中檢索數據。我的代碼是
道就是這個getUsers()。 如果我想讓所有用戶都能正常工作,我可以對他們進行jsp罰款。
public List<User> getUsers() throws Exception {
logger.info("Query DB for users");
return jdbc.query("Select id,name,lname,username,"
+ "password,postcode,authority,email,"
+ "address,dateofbirth,city,country,"
+ "gender "
+ " from Users", new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
logger.debug(" query the user");
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setLname(rs.getString("lname"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setPostcode(rs.getString("postcode"));
user.setAuthority(rs.getString("authority"));
user.setEmail(rs.getString("email"));
user.setAddress(rs.getString("address"));
user.setDateofbirth(rs.getString("dateofbirth"));
user.setCity(rs.getString("city"));
user.setCountry(rs.getString("country"));
user.setGender(rs.getString("gender"));
return user;
}
});
}
這是資源類
@Path("/user")
public class UserResource {
UserServiceWS userServicews = new UserServiceWS();
@GET
@Produces(MediaType.APPLICATION_XML)
public List<User> getUserData() throws Exception {
return userServicews.getUsers();
}
}
所以這是我的UserService類別
public class UserServiceWS {
@Autowired
UserDao userDao ;
public UserServiceWS() {
try {
getUsers();
} catch (Exception e) {
e.printStackTrace();
}
}
public List<User> getUsers() throws Exception {
return new ArrayList<User>(userDao.getUsers());
}
}
所以問題是我在userDao.getUsers()上得到了nul指針異常。 我想念什么? 這是錯誤代碼
HTTP狀態500-java.lang.NullPointerException
類型例外報告
消息java.lang.NullPointerException
描述服務器遇到內部錯誤,導致服務器無法滿足此請求。
例外
javax.servlet.ServletException:java.lang.NullPointerException org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:397)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)org.glassfish .jersey.servlet.ServletContainer.service(ServletContainer.java:344)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java :52)org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
根本原因
java.lang.NullPointerException com.org.projectClient.wsService.UserServiceWS.getUsers(UserServiceWS.java:29)com.org.projectClient.resource.UserResource.getUserData(UserResource.java:23)sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法)sun.reflect.NativeMethodAccessorImpl.invoke(未知源)sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)java.lang.reflect.Method.invoke(未知源)org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory $ 1.invoke(ResourceMethodInvocationHandlerFactory.java:81)org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher $ 1.run(AbstractJavaResourceMethodDispatcher.java:151)org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher。 .java:172)org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:195)org.glassfish.jersey.s erver.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104)org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:384)org.glassfish.jersey.server.model.ResourceMethodInvoker.apply( ResourceMethodInvoker.java:342)org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101)org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:271)org.glassfish.jersey .internal.Errors $ 1.call(Errors.java:271)org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)org.glassfish.jersey.internal.Errors.process(Errors.java:315 )org.glassfish.jersey.internal.Errors.process(Errors.java:297)org.glassfish.jersey.internal.Errors.process(Errors.java:267)org.glassfish.jersey.process.internal.RequestScope.runInScope (RequestScope.java:297)org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254)org.glassfish.jersey.server.ApplicationHandler.handle(Applicatio nHandler.java:1030)org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)org.glassfish.jersey.servlet。 ServletContainer.service(ServletContainer.java:344)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)組織。 netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
note注意在Apache Tomcat / 7.0.68日志中可以找到根本原因的完整堆棧跟蹤。 Apache Tomcat / 7.0.68
用戶類模型
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
@XmlRootElement
public class User {
private int id;
@NotEmpty
@Size(max = 250)
private String username;
@NotEmpty
@Size(max = 250)
private String password;
...........
如果我創建了Map並在其中添加數據並檢索到我沒有問題,則Web服務可以正常運行,沒有問題。 但是如果我查詢數據庫,那么我有nullpointer。我缺少什么? 謝謝
添加為11thdimension后將@Autowired寫入
@Autowired
private UserServiceWS userServicews;
並
@Component
public class UserServiceWS {
@Autowired UserDao userDao ;
然后我得到
HTTP狀態500-MultiException具有3個異常。 他們是:
類型例外報告
消息MultiException具有3個異常。 他們是:
描述服務器遇到內部錯誤,導致服務器無法滿足此請求。
例外
javax.servlet.ServletException:MultiException具有3個異常。 它們是:1. org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到類型為[com.org.projectClient.wsService.UserServiceWS]的合格Bean:需要至少1個符合該依賴條件的自動裝配候選Bean。 依賴項注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} 2. java.lang.IllegalArgumentException:嘗試解決com.org.projectClient.resource.UserResource錯誤的依賴項3 。java.lang.IllegalStateException:無法執行操作:在com.org.projectClient.resource.UserResource上解析
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:397)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer。 java:344)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.netbeans.modules.web。 monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
根本原因
MultiException具有3個異常。 它們是:1. org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到類型為[com.org.projectClient.wsService.UserServiceWS]的合格Bean:需要至少1個符合該依賴條件的自動裝配候選Bean。 依賴項注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} 2. java.lang.IllegalArgumentException:嘗試解決com.org.projectClient.resource.UserResource錯誤的依賴項3 。java.lang.IllegalStateException:無法執行操作:在com.org.projectClient.resource.UserResource上解析
org.jvnet.hk2.internal.Collector.throwIfErrors(Collector.java:88)org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:252)org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator。 java:360)org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:160)org.jvnet.hk2.internal。 Utilities.createService(Utilities.java:2270)org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:687)org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:652)org.glassfish。 jersey.internal.inject.Injections.getOrCreate(Injections.java:169)org.glassfish.jersey.server.model.MethodHandler $ ClassBasedMethodHandler.getInstance(MethodHandler.java:185)org.glassfish.jersey.server.internal.routing。 PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74)org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)org.glassfish.jersey。 server.internal.routing.RoutingStage._apply(RoutingStage.java:116)org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:94)org.glassfish.jersey.server.internal.routing。 RoutingStage.apply(RoutingStage.java:63)org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:263)org .glassfish.jersey.internal.Errors $ 1.call(Errors.java:271)org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)org.glassfish.jersey.internal.Errors.process(Errors .java:315)org.glassfish.jersey.internal.Errors.process(Errors.java:297)org.glassfish.jersey.internal.Errors.process(Errors.java:267)org.glassfish.jersey.process.internal .RequestScope.runInScope(RequestScope.java:297)org.glassfish.jersey.server.S erverRuntime.process(ServerRuntime.java:254)org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)org.glassfish。 jersey.servlet.ServletContainer.service(ServletContainer.java:381)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
根本原因
org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有找到類型為[com.org.projectClient.wsService.UserServiceWS]的合格Bean:需要至少1個符合此依賴項自動候選條件的Bean。 依賴項注釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)} org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:986)org.springframework.beans.factory。 support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:856)org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:768)org.glassfish.jersey.server.spring.AutowiredInjectResolver.getBeanFromSpringContext(AutowiredInjectResolver。 101)org.glassfish.jersey.server.spring.AutowiredInjectResolver.resolve(AutowiredInjectResolver.java:93)org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:214)org.jvnet.hk2.internal.ClazzCreator。 resolveAllDependencies(ClazzCreator.java:237)org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:360)org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)org.g lassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:160)org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2270)org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl。 java:687)org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:652)org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:169)org.glassfish.jersey.server。 model.MethodHandler $ ClassBasedMethodHandler.getInstance(MethodHandler.java:185)org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74)org.glassfish.jersey.server.internal.routing.RoutingStage。 _apply(RoutingStage.java:112)org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java: 116)org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:116)org.glassfish.jersey.server.i nternal.routing.RoutingStage.apply(RoutingStage.java:94)org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:63)org.glassfish.jersey.process.internal.Stages.process( Stages.java:197)org.glassfish.jersey.server.ServerRuntime $ 1.run(ServerRuntime.java:263)org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:271)org.glassfish.jersey。 internal.Errors $ 1.call(Errors.java:267)org.glassfish.jersey.internal.Errors.process(Errors.java:315)org.glassfish.jersey.internal.Errors.process(Errors.java:297)org .glassfish.jersey.internal.Errors.process(Errors.java:267)org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297)org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime .java:254)org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030)org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377)org.glassfish.jersey.servlet.ServletContainer .service(ServletContainer.java:381)org.glassf ish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter。 java:52)org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
note注意在Apache Tomcat / 7.0.68日志中可以找到根本原因的完整堆棧跟蹤。 Apache Tomcat / 7.0.68這是我的xml
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving
up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.org.projectClient" />
<jee:jndi-lookup jndi-name="jdbc/testingdbs" id="dataSource"
expected-type="javax.sql.DataSource">
</jee:jndi-lookup>
<!-- <beans:bean id="messages" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="com.spring.project.demo.messages.messages.properties"
/> </beans:bean> -->
.......等等
問題在下面的行中。
UserServiceWS userServicews = new UserServiceWS();
您正在調用UserServiceWS
構造函數,而不是通過Spring
注入它,因此它的屬性userDao
不是Autowired
。
使UserSerivceWS
成為Component
或Spring bean之后,應該自動裝配它。
像下面
@Component
public class UserServiceWS
並如下注入。
@Autowired
private UserServiceWS userServicews;
您如何連接到數據庫?我認為您遇到了問題。
您必須修復數據庫連接。
那里出了點問題,您無法檢索數據。 您將數據發送到jsp而不將數據發送到服務是不正常的。
您是否正在使用Jndi或其他工具?創建DaoManager來處理您的連接。
最壞的情況是使用密碼用戶名驅動程序詳細信息等創建簡單的打開/關閉數據庫連接。
僅用於測試您的連接。
創建該嘗試后,如果可行,則您的服務沒有數據庫連接。
對於DAOManager,請點擊此處DAOManager
對於一個簡單的連接,請看這里簡單數據庫連接
或在這里
簡單數據庫連接2 。
照顧自己。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.