Spring MVC和Hibernate:NestedServletException:处理程序处理失败;嵌套异常NoClassDefFoundError:JsonMappingException $ Reference

时间:2016-07-11 12:36:06

标签: spring hibernate maven spring-mvc hibernate-mapping

  • 我正在尝试集成Spring MVC和Hibernate& Oracle 11g
  • 表是用户&组织与UserOrg [forgin Keys userId,orgId]
  • 的pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tests</groupId>
    <artifactId>Test</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>tests Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
        <spring.version>4.1.5.RELEASE</spring.version>
        <hibernate.version>4.3.8.Final</hibernate.version>
        <mysql.version>5.1.10</mysql.version>
        <junit-version>4.11</junit-version>
        <servlet-api-version>3.1.0</servlet-api-version>
        <jsp-version>2.1</jsp-version>
        <jstl-version>1.2</jstl-version>
    </properties>
    <dependencies>
        <!-- Spring 4 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>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</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-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- Hibernate 4 dependencies -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- Servlet and JSP -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet-api-version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp-version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- JSTL dependency -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl-version}</version>
        </dependency>
        <!-- JUnit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit-version}</version>
            <scope>test</scope>
        </dependency>
        <!-- External oralce jar -->
        <dependency>
            <groupId>ojdbc7</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- Json dependency -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.1.1</version>
        </dependency>
        <!-- Json dependency -->
        <!-- slf4j-log4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>tests</finalName>
        <!-- <resources> <resource> <directory>src/main/java</directory> <includes> 
            <include>**/*.xml</include> <include>**/*.properties</include> </includes> 
            </resource> </resources> -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <outputDirectory>D:\Newfolder\Softwares\jboss-as-7.1.1.Final\standalone\deployments</outputDirectory>                       
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

  • 实体档案

  • Org.java&amp; Users.java&amp; UsersOrg.java

        package com.tests.entity;
    /**
     * Org generated by hbm2java
     */
    @Entity
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "orgId")
    public class Org implements java.io.Serializable {
        @Id
        @Column(name = "orgId")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private BigDecimal orgId;
        private BigDecimal parentOrgId;
        private BigDecimal orgCode;
        private String orgName;
        private String description;
        private BigDecimal actStat;
        private Set<UserOrg> userOrgs = new HashSet<UserOrg>(0);        
        public Org() {
        }
        public Org(BigDecimal orgId, BigDecimal parentOrgId, BigDecimal orgCode, String orgName, BigDecimal actStat) {
            this.orgId = orgId;
            this.parentOrgId = parentOrgId;
            this.orgCode = orgCode;
            this.orgName = orgName;
            this.actStat = actStat;
        }
        public Org(BigDecimal orgId, BigDecimal parentOrgId, BigDecimal orgCode, String orgName, String description, BigDecimal actStat,
                 Set<UserOrg> userOrgs) {
            this.orgId = orgId;
            this.parentOrgId = parentOrgId;
            this.orgCode = orgCode;
            this.orgName = orgName;
            this.description = description;
            this.actStat = actStat;
            this.userOrgs = userOrgs;
        }
        public BigDecimal getOrgId() {
            return this.orgId;
        }
        public void setOrgId(BigDecimal orgId) {
            this.orgId = orgId;
        }
        public BigDecimal getParentOrgId() {
            return this.parentOrgId;
        }
        public void setParentOrgId(BigDecimal parentOrgId) {
            this.parentOrgId = parentOrgId;
        }
        public BigDecimal getOrgCode() {
            return this.orgCode;
        }
        public void setOrgCode(BigDecimal orgCode) {
            this.orgCode = orgCode;
        }
        public String getOrgName() {
            return this.orgName;
        }
        public void setOrgName(String orgName) {
            this.orgName = orgName;
        }
        public String getDescription() {
            return this.description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public BigDecimal getActStat() {
            return this.actStat;
        }
        public void setActStat(BigDecimal actStat) {
            this.actStat = actStat;
        }
        public BigDecimal getOrgPhone() {
            return this.orgPhone;
        }
        @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
        // @JsonIgnore
        public Set<UserOrg> getUserOrgs() {
            return this.userOrgs;
        }
        // @ManyToOne(cascade={}, fetch=FetchType.LAZY)
        // @JsonIgnore
        public void setUserOrgs(Set<UserOrg> userOrgs) {
            this.userOrgs = userOrgs;
        }
    }
    
  • 与Users.java&amp; UserOrg.java [orgId,userId forgin keys]

  • hibernate hbm xml文件Users.hbm.xml&amp; UserOrg.hbm.xml&amp; Org.hbm.xml

        <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated Jun 17, 2016 3:32:52 PM by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping package="com.tests.entity">
        <class name="Org" table="ORG">
        <id name="orgId" type="big_decimal">
            <column name="ORG_ID" precision="22" scale="0" />
            <generator class="increment" />
        </id>
        <property name="parentOrgId" type="big_decimal">
            <column name="PARENT_ORG_ID" precision="22" scale="0" not-null="true" />
        </property>
        <property name="orgCode" type="big_decimal">
            <column name="ORG_CODE" precision="22" scale="0" not-null="true" />
        </property>
        <property name="orgName" type="string">
            <column name="ORG_NAME" length="32" not-null="true" unique="true" />
        </property>
        <property name="description" type="string">
            <column name="DESCRIPTION" length="100" />
        </property>
        <property name="actStat" type="big_decimal">
            <column name="ACT_STAT" precision="22" scale="0" not-null="true" />
        </property>        
        <set name="userOrgs" table="USER_ORG" inverse="true" lazy="true" fetch="select">
            <key>
            <column name="ORG_ID" precision="22" scale="0" />
            </key>
            <one-to-many class="UserOrg" />
        </set>
        <set name="branches" table="BRANCH" inverse="true" lazy="true" fetch="select">
            <key>
            <column name="ORG_ID" precision="22" scale="0" not-null="true" />
            </key>
            <one-to-many class="Branch" />
        </set>
        <!-- <set name="users" table="USER_ORG" inverse="true" lazy="true" fetch="select"> 
            <key>
            <column name="ORG_ID" precision="22" scale="0" />
            </key>
            <many-to-many class="Users" column="USER_ID" />
        </set>
        <set name="branches" table="BRANCH" inverse="true" lazy="false" fetch="select">
            <key>
            <column name="ORG_ID" precision="22" scale="0" not-null="true" />
            </key>
            <one-to-many class="Branch" />
        </set> -->
        </class>
    </hibernate-mapping>
    
  • UserOrg.hbm.xml

        <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated Jun 17, 2016 3:32:52 PM by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping package="com.tests.entity">
        <class name="UserOrg" table="USER_ORG">
        <id name="userOrgId" type="big_decimal">
            <column name="USER_ORG_ID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="org" class="Org"  fetch="select">
            <column name="ORG_ID" precision="22" scale="0" />
        </many-to-one>
        <many-to-one name="users" class="Users" fetch="select">
            <column name="USER_ID" precision="22" scale="0" />
        </many-to-one>
        </class>
    </hibernate-mapping>
    
  • Hibernate Util文件

        package com.tests.util;
    @Repository
    public class HibernateUtil {
        @Autowired
        private SessionFactory sessionFactory;
        public Object getByUserId(String userQuery, String userId) {
    
            return sessionFactory.getCurrentSession().createQuery(userQuery).setParameter("userId", userId).uniqueResult();
        }
    }
    
  • 拦截器类

        package com.tests.interceptor;
    public class OrganizationInterceptor extends HandlerInterceptorAdapter {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            String servletPath = request.getServletPath();
            if (servletPath.equals("/organization")) {
                return true;
            }
            return true;
        }
    }
    
  • 和其他服务&amp;道类
  • 控制器类

        package com.tests.controller;
    
    
    @Controller
    @RequestMapping("organization")
    public class OrganizationLoginController {
        @SuppressWarnings("unused")
        private static Logger logger = LoggerFactory.getLogger(OrganizationLoginController.class);
        @Autowired
        private OrganizationService organizationService;
        @SuppressWarnings({ "unused", "rawtypes" })
        @RequestMapping(value = { "/", "", "login" })
        public @ResponseBody void organizationLogin(@RequestParam(required = false) String userName, @RequestParam(required = false) String password,
                HttpServletRequest request, HttpServletResponse response) {
                Users loginUser = organizationService.getLoginAuthentication(userName, password);
                if(loginUser != null){
                    //Do something
                }else{              
                    //Do something
                }
        }
    }
    
  • 部署项目但在运行应用程序时出现错误[错误日志在下面]

  • 我做了很多改动,但得到了同样的错误,如果@JsonIgnore使用它的工作正常,但我无法获得映射数据。

  • 的server.log

        15:32:36,948 DEBUG [org.springframework.web.servlet.DispatcherServlet] (ajp-localhost-127.0.0.1-8009-1) Could not complete request: org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException$Reference
        at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) [spring-webmvc-4.1.5.RELEASE.jar:4.1.5.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
        at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:505) [jbossweb-7.0.13.Final.jar:]
        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:445) [jbossweb-7.0.13.Final.jar:]
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
        at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_79]
    Caused by: java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException$Reference
        at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:166) [jackson-mapper-asl-1.9.13.jar:1.9.13]
        at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) [jackson-mapper-asl-1.9.13.jar:1.9.13]
    
  • 请帮助我在哪里做错了,我是hibernat的新人

  • 提前致谢

1 个答案:

答案 0 :(得分:0)

尝试添加jackson-core-asl依赖

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>