web-dev-qa-db-ja.com

NoClassDefFoundError JSONオブジェクトの解析中のJsonAutoDetect

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ファイルを開いて、必要なライブラリとクラスが存在することを物理的に確認しました。私はあちこち検索し、ライブラリを含めるためのさまざまな方法を探しましたが、何も機能していないようです。

46
jhahn

将来ここに来る人にとっての答えは:

jackson corejackson 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
127
i_am_jorf

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>
64
Johan Sjöberg

または、次の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'
7
userM1433372

私の場合のように、mavenを使用し、すべてのライブラリを適切に配置している場合、単純なmvn cleanおよびmvn install問題を修正しました。

1
Vilen

Eclipseでの開発中にTomcatを使用している場合、このエラーが発生した場合(おそらく、republish/cleanを押したため)、

プロジェクト-> Maven-> Update Project ...を右クリックします.

私のためにこの問題を解決しました。

さらに、JohanSjöbergからの依存関係も含めました

0
kaya