2012-04-10 10 views
46

Ich entwickle eine Webapp mit den Cloud-Diensten von Amazon und ich muss JSON-Objekte verwenden. Wie mein Projekt eingerichtet ist, habe ich ein HTML-Formular, wo der Benutzer ihre Informationen ausfüllen und übermitteln wird. Nach der Übermittlung werden die Daten in einer Online-Datenbank gespeichert und eine Bestätigungs-E-Mail an sie gesendet. Bevor ich die Daten an die Datenbank senden kann, muss ich alles in ein JSON-Objekt einfügen. Mein Servlet, in Java getan, sieht wie folgt aus:NoClassDefFoundError JsonAutoDetect beim Analysieren des JSON-Objekts

public class FormHandling extends HttpServlet { 
    //doGet function 
    public void doGet (HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
     // In this part of the code I take in the user data and build an HTML 
     // page and return it to the user 

     // Create String Mapping for User Data object 
     Map<String,Object> userData = new HashMap<String,Object>(); 

     // Map the names into one struct. In the code below we are creating 
     // values for the nameStruct from the information the user has 
     // submitted on the form. 
     Map<String,String> nameStruct = new HashMap<String,String>(); 
     nameStruct.put("fName", request.getParameter("fname")); 
     nameStruct.put("lName", request.getParameter("lname")); 
     nameStruct.put("mInit", request.getParameter("minit")); 

     // Map the three email's together (providing there are 3). 
     // This is the same logic as the names. 
     Map<String,String> emailStruct = new HashMap<String,String>(); 
     emailStruct.put("email", request.getParameter("email1")); 
     emailStruct.put("email", request.getParameter("email2")); 
     emailStruct.put("email", request.getParameter("email3")); 

     // Put Name Hash Value Pair inside User Data Object 
     userData.put("name", nameStruct); 
     userData.put("emails", emailStruct); 
     userData.put("age", 22); 

     // Create the Json data from the userData 
     createJson(userData); 

     // Close writer 
     out.close(); 
    } 

    public File createJson(Map<String,Object> userData) 
     throws JsonGenerationException, JsonMappingException, IOException { 
     File user = new File("user.json"); 

     // Create mapper object 
     ObjectMapper mapper = new ObjectMapper(); 

     // Add the userData information to the json file 
     mapper.writeValue(user, userData); 
     return user; 
    } 
} 

Als ich senden Sie das Formular mit diesem Code ich folgende Fehlermeldung:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonAutoDetect com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std.(VisibilityChecker.java:169) com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:197) edu.tcnj.FormHandling.createJson(FormHandling.java:115) edu.tcnj.FormHandling.doGet(FormHandling.java:104) edu.tcnj.FormHandling.doPost(FormHandling.java:131) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Jetzt weiß ich, dass Fehler bedeutet, dass es isn‘ t Finden der Jackson Databind Bibliothek. Ich entwickle in Eclipse und ich weiß, dass der Build-Pfad von Zeit zu Zeit versagt, also habe ich die Bibliotheken auch im Ordner WebContent \ WEB-INF \ lib abgelegt. Dies hat Probleme gelöst, die ich zuvor hatte. Dies scheint jedoch diesmal mein Problem nicht zu lösen. Ich habe sogar die JAR-Dateien geöffnet, um physisch zu prüfen, ob die benötigte Bibliothek und Klasse vorhanden ist. Ich habe versucht, überall zu suchen und verschiedene Möglichkeiten zu finden, die Bibliothek einzuschließen, aber nichts scheint zu funktionieren.

+0

Können Sie uns wissen lassen, welche Version der Jackson-Bibliothek Sie verwenden? –

+0

Ich brauche zwei JARs, 'jackson-core-lgpl-1.5.6.jar' und' jackson-mapper-lgpl-1.5.6.jar' –

+3

Es stellte sich heraus, dass mir ein drittes Glas fehlte .... ugh. So einfach. Für mich muss ich die Jackson Databind-, Core- und Annotation-Bibliotheken verwenden. Ich benutze Version 2.0. Als ich das dritte Glas gefunden hatte, war es glücklich. Trotzdem danke! – jhahn

Antwort

125

Für diejenigen, die hier in der Zukunft kommen, ist die Antwort:

Wenn Sie nur jackson core und jackson databind kopiert haben, Sie jackson annotations müssen die ObjectMapper verwenden.

Zum Beispiel, stellen Sie sicher, dass Sie etwas davon haben:

[16:32:01]:/android-project/libs  master]$ ls -lAF 
total 2112 
[email protected] 1 jeffamaphone staff 33525 Jun 18 16:06 jackson-annotations-2.0.2.jar 
[email protected] 1 jeffamaphone staff 193693 Jun 7 16:42 jackson-core-2.0.2.jar 
[email protected] 1 jeffamaphone staff 847121 Jun 18 15:22 jackson-databind-2.0.2.jar 
+11

und das kann von http://wiki.fasterxml.com/JacksonDownload heruntergeladen werden. (Speichern Sie ein Google.) – ericsoco

+0

Ist es sogar möglich, mit Jackson ohne den ObjectMapper nach und von Json zu schreiben und zu lesen? – CorayThan

+0

Zu der Zeit war es in meinem Fall möglich, einige JSON ohne sie zu lesen. Ich bin mir nicht sicher, wie der Zustand der Dinge jetzt ist. –

63

auf @ jeffamaphone die ausgezeichnete Antwort zu erweitern, für Maven Benutzer

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.7.3</version> 
</dependency> 

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.7.3</version> 
</dependency> 

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-annotations</artifactId> 
    <version>2.7.3</version> 
</dependency> 
+1

Vielen Dank, dies funktionierte für mich nach dem Spring Acessing Twitter Data Tutorial https : //spring.io/guides/gs/accessing-twitter/ – wired00

+0

hat auch für mich funktioniert. Vielen Dank – siddhusingh

7

Oder die folgende gradle Konfiguration:

compile 'com.fasterxml.jackson.core:jackson-core:2.2.2' 
compile 'com.fasterxml.jackson.core:jackson-databind:2.2.2' 
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.2' 
1

Wenn Sie Maven verwenden und alle Bibliotheken an Stelle wie in meinem Fall eine einfachehabenund mvn install behobenes Problem.

0

Wenn Sie/waren tomcat mit, während in Eclipse entwickeln und bekam diesen Fehler (vielleicht, weil Sie gedrückt Republish/clean),

ein Rechtsklick auf die Ausbau-> Maven-> Update Project ...

löste dieses Problem für mich.

Außerdem ich habe auch die Abhängigkeiten von Johan Sjöberg

Verwandte Themen