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.
Können Sie uns wissen lassen, welche Version der Jackson-Bibliothek Sie verwenden? –
Ich brauche zwei JARs, 'jackson-core-lgpl-1.5.6.jar' und' jackson-mapper-lgpl-1.5.6.jar' –
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