2012-04-10 51 views
46

Tôi đang phát triển một ứng dụng web sử dụng dịch vụ đám mây của Amazon và tôi cần sử dụng các đối tượng JSON. Dự án của tôi được thiết lập như thế nào, tôi có một biểu mẫu HTML nơi người dùng sẽ điền thông tin của họ và gửi. Sau khi gửi dữ liệu sẽ được đặt vào cơ sở dữ liệu trực tuyến và email xác nhận sẽ được gửi đến chúng. Trước khi tôi có thể gửi dữ liệu đến cơ sở dữ liệu, tôi cần phải đặt tất cả dữ liệu đó vào một đối tượng JSON. servlet của tôi, được thực hiện trong Java, trông như thế này:NoClassDefFoundError JsonAutoDetect khi phân tích cú pháp đối tượng 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; 
    } 
} 

Khi tôi gửi biểu mẫu sử dụng mã này tôi nhận được thông báo lỗi sau:

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)

Bây giờ tôi biết lỗi đó có nghĩa là nó isn' t tìm thư viện dữ liệu Jackson. Tôi đang phát triển trong Eclipse và tôi biết xây dựng đường dẫn messes lên theo thời gian vì vậy tôi cũng đặt các thư viện trong thư mục WebContent \ WEB-INF \ lib. Điều này đã giải quyết được vấn đề tôi đã có trước đây. Tuy nhiên, điều này dường như không giải quyết được vấn đề của tôi lần này. Tôi thậm chí đã mở các tập tin jar để kiểm tra thực tế rằng thư viện và lớp học cần thiết đang có, và họ đang có. Tôi đã cố gắng tìm kiếm trên tất cả và tìm kiếm các cách khác nhau để bao gồm các thư viện nhưng không có gì có vẻ làm việc.

+0

Bạn có thể cho chúng tôi biết phiên bản thư viện Jackson bạn đang sử dụng không? –

+0

Tôi cần hai JAR, 'jackson-core-lgpl-1.5.6.jar' và 'jackson-mapper-lgpl-1.5.6.jar' –

+3

Hóa ra tôi đã thiếu một bình thứ ba .... ugh. Quá dễ. Đối với tôi, tôi cần sử dụng thư viện dữ liệu, lõi và thư viện chú thích jackson. Tôi đang sử dụng phiên bản 2.0. Khi tôi tìm thấy cái bình thứ ba, nó rất vui. Cảm ơn bạn mặc dù! – jhahn

Trả lời

125

Đối với những người đến đây trong tương lai, câu trả lời là:

Nếu bạn đã chỉ sao chép jackson corejackson databind, bạn cần jackson annotations sử dụng ObjectMapper.

Ví dụ, hãy chắc chắn bạn có một cái gì đó như thế này:

[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

và có thể tải xuống từ http://wiki.fasterxml.com/JacksonDownload. (lưu bạn một google.) – ericsoco

+0

Thậm chí có thể viết và đọc và từ Json với Jackson mà không có ObjectMapper không? – CorayThan

+0

Vào thời điểm đó, trong trường hợp của tôi, có thể đọc một số JSON mà không có nó. Tôi không chắc tình trạng hiện tại là gì. –

63

Để mở rộng về câu trả lời tuyệt vời @ jeffamaphone của, cho người dùng 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> 
+1

Cảm ơn bạn, Điều này đã hiệu quả đối với tôi sau khi thực hiện Hướng dẫn về Dữ liệu Twitter của Spring Acessing https : //spring.io/guides/gs/accessing-twitter/ – wired00

+0

cũng làm việc cho tôi. Cảm ơn – siddhusingh

7

Hoặc cấu hình gradle sau:

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

Nếu bạn sử dụng maven và có tất cả các thư viện tại chỗ như trong trường hợp của tôi một cách đơn giản mvn cleanmvn install vấn đề cố định.

0

Nếu bạn đang/đã sử dụng tomcat trong khi phát triển trong nhật thực và đã nhận lỗi này (có lẽ vì bạn ép tái xuất bản qua/sạch),

một nhấp chuột phải vào dự án-> Maven-> Project Update ...

giải quyết vấn đề này cho tôi.

Ngoài ra, tôi cũng đã bao gồm các phụ thuộc từ Johan Sjöberg

Các vấn đề liên quan