2015-07-21 57 views
0

我試圖從我的Web服務檢索一個JSON對象,並將其變成一個Java對象。我發現我可以使用POJO classJavaBean來綁定我的對象。java.lang.ClassNotFoundException澤西和傑克遜問題

嗯,我試圖用Jackson,所以我把它添加到我的POM這樣的:

這裏是我的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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>DisasterManagement</groupId> 
<artifactId>DisasterManagement</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>asm</groupId> 
     <artifactId>asm</artifactId> 
     <version>3.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-bundle</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>org.json</groupId> 
     <artifactId>json</artifactId> 
     <version>20140107</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>jsr311-api</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>jdbc</groupId> 
     <artifactId>jdbc</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.19</version> 
    </dependency> 
</dependencies> 

和我web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 
    <display-name>DisaterManagement</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <url-pattern>/disastermanagement/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

而且我在互聯網上發現我可以綁定他們喜歡這樣: 我的web服務是這樣的:

@Path("/update") 
@PUT 
@Consumes("application/json") 
public void updateAlert(String test) { 

    ObjectMapper mapper = new ObjectMapper(); 
    //JSON to POJO 
    Alert alert; 
    try { 
     alert = mapper.readValue(new File(test), Alert.class); 
     System.out.println(alert.getName()); 
    } catch (JsonParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
    //return Response.status(200).header("Access-Control-Allow-Origin", "*").entity("out from update").build(); 
} 

我的POJO類對象就是這樣一個測試:

package com.disastermanagement.restjersey; 

//@XmlRootElement 



public class Alert{ 
     private String name; 
     private String phone; 

     public Alert(){ 
     } 

    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
    public String getPhone() { 
    return phone; 
    } 
    public void setPhone(String phone) { 
    this.phone = phone; 
    } 

    @Override 
    public String toString() { 
     return "User [name=" + name + ", name=" + phone + " ]"; 
    } 
} 

而且在編譯時,我發現這個錯誤java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

我真的很新,我不知道我錯過了什麼。

我在StackExchange上嘗試了一些解決方案,但它變得一團糟。

謝謝

UPDATE

修改我的POM它的工作原理後,並沒有更多的錯誤

我POM是像現在:

<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>DisasterManagement</groupId> 
<artifactId>DisasterManagement</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>asm</groupId> 
     <artifactId>asm</artifactId> 
     <version>3.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-bundle</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>org.json</groupId> 
     <artifactId>json</artifactId> 
     <version>20140107</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>jsr311-api</artifactId> 
     <version>1.1.1</version> 
    </dependency> 
    <dependency> 
     <groupId>jdbc</groupId> 
     <artifactId>jdbc</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.19</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-servlet</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.6.0</version> 
    </dependency> 
</dependencies> 

但當打電話給我的時候EB服務我有這樣的例外:

java.io.FileNotFoundException: { 
    "phone": "jhsfd", 
    "name": "Jane Doe", 
} 

其實我送我的JSON對象,但我不知道該如何接受呢!

回答

0

您需要添加在你pom XML

<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-servlet</artifactId> <version>1.19</version> </dependency>

+0

servlet依賴現在,這些錯誤:'StandardWrapper.Throwable java.lang.NoClassDefFoundError:COM/fasterxml /傑克遜/核心/ JsonParseException'。 ..'引發:java.lang.ClassNotFoundException:com.fasterxml.jackson.core.JsonParseException和'java.lang.ClassNotFoundException:com.fasterxml.jackson.core.JsonParseException' – Ayyoub

+0

你需要谷歌'classname'和只需找到正確的'jar'將其添加到您的'pom' –

+0

請檢查更新,我認爲這是另一個專業版瑕疵,但我會接受你的回答 – Ayyoub