我的Spring服务中使用Rest Jax rs的java.lang.NullPointerException如何修复它?

时间:2015-05-05 19:03:32

标签: spring rest maven java-ee jax-rs

我的userService为null 怎么办? tnks;)

 java.lang.NullPointerException
    at com.what.now.rest.RestCreateUser.cretaeAccount(RestCreateUser.java:52)

REST服务

浏览器服务

package com.what.now.rest;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.what.now.business.IUserBusiness;
import com.what.now.model.bean.User;
import com.what.now.model.dto.AccountRegisterDTO;
import com.what.now.tools.ConverterUserBeanDTO;
import com.what.now.tools.ValidateRestInput;

/**
 * Rest Service
 *
 */
@Component
@Path("/register")
public class RestCreateUser {
    @Autowired
    private IUserBusiness userService;
    @POST
    @Path("/createAccount")
    @Produces({ MediaType.APPLICATION_JSON, })
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XHTML_XML })
    public Boolean cretaeAccount(final AccountRegisterDTO newAccount) {
        Boolean result = false;
            // create user
            User user = ConverterUserBeanDTO.userDtoToBean(newAccount);
            // add dto in bean
            // save user
            userService.create(user);
            // result to save
            if (user.getId() != 0) {
                result = true;
            }
        return result;   
}

服务

添加数据库的服务

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.what.now.business.IUserBusiness;
import com.what.now.dao.IUserDAO;
import com.what.now.model.bean.User;

@Service
public class UserBusinessImpl implements IUserBusiness {
    @Autowired
    IUserDAO userDAO;

    public void create(User user) {
         userDAO.create(user);
    }

    public User find(String id) {
        return userDAO.find(id);
    }

    public void update(User user) {
        userDAO.update(user);

    }

    public void delete(User user) {
        userDAO.delete(user);

    }

}

的web.xml

conf for web app ..这个conf加载spring context和init Jersey servlet

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
            version="3.0">
// context application 
            <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath*:*/applicationContext.xml </param-value>
            </context-param>
                        <listener>
                <listener-class>
        org.springframework.web.context.ContextLoaderListener
                </listener-class>
            </listener>
            <servlet>
                <servlet-name>whatNow-rest-serlvet</servlet-name>
                <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
                <init-param>
                    <param-name>com.sun.jersey.config.property.packages</param-name>
                    <param-value>com.what.now.rest</param-value>
                </init-param>
                <init-param>
                    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
                    <param-value>true</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
            </servlet>
            <servlet-mapping>
                <servlet-name>whatNow-rest-serlvet</servlet-name>
                <url-pattern>/rest/*</url-pattern>
            </servlet-mapping>
        </web-app>

的applicationContext.xml

这是我的应用程序配置

 <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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">

  <context:component-scan base-package="com.what.now.*"
    annotation-config="true" />

  <tx:annotation-driven/>

</beans>

的pom.xml

   <?xml version="1.0"?>
        <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">      
          <modelVersion>4.0.0</modelVersion>       
           <groupId>com.what.now.project</groupId>
            <version>0.0.1-SNAPSHOT</version>
           <artifactId>whatNow-packaging</artifactId>
          <packaging>war</packaging>
          <url>http://maven.apache.org</url>
          <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
             <jdk.version>1.8</jdk.version>
              <spring.version>3.2.13.RELEASE</spring.version>
              <jersey.version>1.17.1</jersey.version>
                <jersey.client.version>1.17.1</jersey.client.version>
                <jersey.servlet.version>1.17.1</jersey.servlet.version>
                <jersey.json.version>1.17.1</jersey.json.version>
                <jersey.multipart>1.17.1</jersey.multipart>
                <javax.mail>1.4</javax.mail>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.source>1.8</maven.compiler.source>
          </properties>
           <dependencies>
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>        
            </dependency>
             <!-- Spring  -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-orm</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                    <version>${spring.version}</version>
                </dependency>
             <!-- Jersey   -->
            <dependency>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>jersey-json</artifactId>
                    <version>${jersey.json.version}</version>
            </dependency>       
            <dependency>
                     <groupId>com.sun.jersey</groupId>
                     <artifactId>jersey-servlet</artifactId>
                     <version>${jersey.servlet.version}</version>
            </dependency>
                 <!-- Spring + Jersey  -->
            <dependency>
                <groupId>com.sun.jersey.contribs</groupId>
                <artifactId>jersey-spring</artifactId>
                <version>${jersey.version}</version>
                <exclusions>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring</artifactId>
                        </exclusion>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-core</artifactId>
                        </exclusion>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-web</artifactId>
                        </exclusion>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-beans</artifactId>
                        </exclusion>
                        <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-context</artifactId>
                        </exclusion>
                    </exclusions>
            </dependency>
             <!-- hibernate  -->
</dependencies>
          </build>
        </project>

2 个答案:

答案 0 :(得分:0)

您正在进行包裹扫描

<context:component-scan base-package="com.what.now.*"

但您尚未在Service类中指定包名称。 将其包装更改为扫描包。

答案 1 :(得分:0)

此示例适用于我的

的applicationContext

 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx" 
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd

            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx.xsd

            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">

        <context:component-scan base-package="com.wu.wn.*" />
         <bean id="userService" class="com.wu.wn.services.impl.UserServiceImpl" />
         <bean id="noteService" class="com.wu.wn.services.impl.NoteServiceImpl" />
    </beans>

POM

这是我的依赖

      <spring.version>4.1.4.RELEASE</spring.version>    
<spring.security.version>3.2.5.RELEASE</spring.security.version>
                <jersey.version>2.14</jersey.version>
                <jackson.version>1.9.13</jackson.version>
                <hibernate.version>4.2.7.Final</hibernate.version>
                <junit.version>4.11</junit.version>
                <log4j.version>1.2.17</log4j.version>
<dependencies>

        <!-- Jersey-Spring http://mvnrepository.com/artifact/org.glassfish.jersey.ext/jersey-spring3/2.4.1 -->
        <dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-spring3</artifactId>
            <version>${jersey.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-entity-filtering</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <!-- Spring 3 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- JUnit for test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
            <!-- log  -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>   
    </dependencies>

网络

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:spring/applicationContext.xml
    </param-value>
</context-param>
<context-param>
    <param-name>logProperties</param-name>
    <param-value>classpath:log/log4j.properties</param-value>
</context-param>
<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>
        org.glassfish.jersey.servlet.ServletContainer
    </servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.wu.wn.rest.RestJaxRsApplication</param-value>          
    </init-param>       
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

只是@Autowired工作我的非空