Estoy desarrollando una aplicación web utilizando los servicios en la nube de Amazon y necesito hacer uso de los objetos JSON. Cómo está configurado mi proyecto es que tengo un formulario HTML donde el usuario completará su información y la enviará. Una vez enviados, los datos se colocarán en una base de datos en línea y se les enviará un correo electrónico de confirmación. Antes de poder enviar los datos a la base de datos, necesito colocarlos en un objeto JSON. Mi servlet, hecho en Java, es el siguiente:NoClassDefFoundError JsonAutoDetect al analizar el objeto JSON
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;
}
}
Cuando envío del formulario utilizando este código me sale el siguiente mensaje de error:
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)
Ahora sé que significa que el error que ISN' t encontrando la biblioteca de datos de Jackson. Estoy desarrollando en Eclipse y sé que la ruta de compilación se estropea de vez en cuando, así que también coloqué las bibliotecas en la carpeta WebContent \ WEB-INF \ lib. Esto ha resuelto problemas que tuve antes. Sin embargo, esto no parece resolver mi problema esta vez. Incluso he abierto los archivos jar para verificar físicamente que la biblioteca y la clase necesaria estén allí, y lo son. He intentado buscar por todas partes y buscar diferentes formas de incluir la biblioteca, pero parece que nada funciona.
¿Puede hacernos saber qué versión de la biblioteca de Jackson que está utilizando? –
Necesito dos JAR, 'jackson-core-lgpl-1.5.6.jar' y' jackson-mapper-lgpl-1.5.6.jar' –
Resulta que me faltaba una tercera jarra ... ugh. Tan sencillo. Para mí, necesito usar las bibliotecas de anotación de datos, núcleo y anotación de jackson. Estoy usando la versión 2.0. Una vez que encontré ese tercer jarro estaba feliz. ¡Gracias de cualquier forma! – jhahn