NoClassDefFoundError在parsingJSON对象时JsonAutoDetect

我正在开发一个使用亚马逊云服务的Web应用程序,我需要使用JSON对象。 我的项目是如何build立的,我有一个HTML表单,用户将填写他们的信息并提交。 一旦提交,数据将被放入在线数据库中,并向他们发送确认电子邮件。 在我可以提交数据到数据库之前,我需要把它放到一个JSON对象中。 我的servlet,用Java完成,看起来像这样:

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; } } 

当我使用此代码提交表单时,出现以下错误消息:

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)

现在我知道这个错误意味着它没有findjackson的数据绑定库。 我在Eclipse中进行开发,我知道构buildpath会时不时地弄乱,所以我也把库放在WebContent \ WEB-INF \ lib文件夹中。 这解决了我以前遇到的问题。 不过,这次似乎并没有解决我的问题。 我甚至打开了jar文件来检查所需的库和类是否在那里。 我已经尝试过search遍地,并寻find不同的方式来包括图书馆,但似乎没有任何工作。

对于未来的人来说,答案是:

如果您只复制了jackson corejackson databind ,则需要使用jackson annotations来使用ObjectMapper

例如,确保你有这样的东西:

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

为了扩展@ jeffamaphone的优秀答案,为maven用户

 <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> 

或者下面的gradleconfiguration:

 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' 

如果你使用maven,并在我的情况下有所有的库,一个简单的mvn cleanmvn install固定的问题。

如果你是/正在使用tomcat而在Eclipse中开发,并得到这个错误(也许是因为你按重新发布/干净),

右键点击项目 – > Maven-> Update Project …

为我解决了这个问题。

另外,我也包括JohanSjöberg的依赖关系