46

Amazon のクラウド サービスを使用して Web アプリケーションを開発しており、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)

エラーは、Jackson データバインド ライブラリが見つからないことを意味することがわかりました。私は Eclipse で開発していますが、ビルド パスがときどき混乱することを知っているので、ライブラリも WebContent\WEB-INF\lib フォルダーに配置しました。これで今まで抱えていた問題が解決しました。しかし、これは今回の問題を解決していないようです。jar ファイルを開いて、必要なライブラリとクラスがそこにあることを物理的に確認しました。ライブラリを含めるさまざまな方法を調べてみましたが、何も機能していないようです。

4

5 に答える 5

127

将来ここに来る人のために、答えは次のとおりです。

とのみをコピーjackson coreした場合は、 を使用するjackson databind必要があります。jackson annotationsObjectMapper

たとえば、次のようなものがあることを確認してください。

[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
于 2012-06-18T23:33:22.053 に答える
65

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>
于 2012-10-13T21:53:04.687 に答える
7

または、次の 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'
于 2014-06-29T10:32:02.770 に答える
1

私の場合のようにmavenを使用し、すべてのライブラリを配置している場合、単純mvn cleanmvn install修正された問題です。

于 2016-02-19T11:59:15.680 に答える