Подтвердить что ты не робот

NoClassDefFoundError JsonAutoDetect при анализе объекта JSON

Я разрабатываю webapp с использованием облачных сервисов Amazon, и мне нужно использовать объекты 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 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/quickxml/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 databind. Я развиваюсь в Eclipse, и время от времени я знаю, что путь сборки запутывается, поэтому я также поместил библиотеки в папку WebContent\WEB-INF\lib. Это решило проблемы, которые я имел раньше. Однако на этот раз это, похоже, не решает мою проблему. Я даже открыл файлы jar, чтобы физически проверить, что библиотека и класс нужны, и они есть. Я пробовал искать все по-разному и изучал разные способы включения библиотеки, но ничего не работает.

4b9b3361

Ответ 1

Для тех, кто приезжает сюда в будущем, ответ:

Если вы только скопировали jackson core и jackson databind, вам нужно jackson annotations использовать ObjectMapper.

Например, убедитесь, что у вас есть что-то вроде этого:

[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

Ответ 2

Чтобы расширить на @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>

Ответ 3

Или следующую конфигурацию 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'

Ответ 4

Если вы используете maven и имеете все библиотеки, как в моем случае, это простая проблема с mvn clean и mvn install.

Ответ 5

Если вы/использовали tomcat во время разработки в eclipse и получили эту ошибку (возможно, потому, что вы нажали republish/clean),

щелкните правой кнопкой мыши проект- > Maven- > Обновить проект...

решил эту проблему для меня.

Кроме того, я включил также зависимости от Johan Sjöberg