簡體   English   中英

從數據庫中檢索其余數據(球衣)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM