Amazonのクラウドサービスを使用してwebappを開発していますが、JSONオブジェクトを利用する必要があります。私のプロジェクトの設定方法は、ユーザーが情報を入力して送信するHTMLフォームがあります。送信されると、データはオンラインデータベースに保存され、確認メールが送信されます。データベースにデータを送信する前に、すべてをJSONオブジェクトに配置する必要があります。 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)
今、私はエラーがジャクソンのデータバインドライブラリを見つけられないことを意味することを知っています。私はEclipseで開発していますが、ビルドパスが時々混乱することを知っているので、WebContent\WEB-INF\libフォルダにもライブラリを配置しました。これは私が以前持っていた問題を解決しました。ただし、今回はこれで問題が解決しないようです。 jarファイルを開いて、必要なライブラリとクラスが存在することを物理的に確認しました。私はあちこち検索し、ライブラリを含めるためのさまざまな方法を探しましたが、何も機能していないようです。
将来ここに来る人にとっての答えは:
jackson core
とjackson databind
のみをコピーした場合、ObjectMapper
を使用するにはjackson annotations
が必要です。
たとえば、次のようなものがあることを確認してください。
[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
Mavenユーザー向けに@jeffamaphoneの優れた答えを拡張する
<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>
または、次のgradle構成:
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 clean
およびmvn install
問題を修正しました。
Eclipseでの開発中にTomcatを使用している場合、このエラーが発生した場合(おそらく、republish/cleanを押したため)、
プロジェクト-> Maven-> Update Project ...を右クリックします.
私のためにこの問題を解決しました。
さらに、JohanSjöbergからの依存関係も含めました