NoClassDefFoundError JsonAutoDetect ao analisar o objeto JSON
Estou desenvolvendo um webapp usando os serviços em nuvem da Amazon e preciso usar objetos JSON. Como meu projeto está configurado é, eu tenho um formulário HTML onde o usuário irá preencher suas informações e enviar. Uma vez submetidos, os dados serão colocados em um banco de dados online e um email de confirmação será enviado para eles. Antes de poder enviar os dados para o banco de dados, preciso colocá-los em um objeto JSON. Meu servlet, feito em Java, é assim:
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;
}
}
Quando envio o formulário usando esse código, recebo a seguinte mensagem de erro:
java.lang.NoClassDefFoundError: com / fasterxml / jackson / anotação / 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)
Agora eu sei que o erro significa que não está encontrando a biblioteca de vinculação de dados de Jackson. Eu estou desenvolvendo no Eclipse e sei que o caminho de compilação bagunça de vez em quando, então também coloquei as bibliotecas na pasta WebContent \ WEB-INF \ lib. Isso resolveu problemas que eu tive antes. No entanto, isso não parece resolver o meu problema desta vez. Eu até abri os arquivos jar para verificar fisicamente se a biblioteca e a classe necessárias estão lá, e eles estão. Eu tentei pesquisar em todo o lugar e procurando maneiras diferentes de incluir a biblioteca, mas nada parece funcionar.