Вопрос по java, eclipse, json – NoClassDefFoundError JsonAutoDetect при анализе объекта JSON

46

Я разрабатываю веб-приложение с использованием облачных сервисов 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'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 / fastxml / jackson / annotation / JsonAutoDetect com.fasterxml.jackson.databind.introspect.VisibilityChecker $ Std. (VisibilityChecker.java:169) com.fasterxml.jackson.jecta.Ob. Java: 197) edu.tcnj.FormHandling.createJson (FormHandling.java:115) edu.tcnj.FormHandling.doGet (FormHandling.java:104) edu.tcnj.FormHandling.doPost (FormHandling.java:1let.ax) jav http.HttpServlet.service (HttpServlet.java:641) javax.servlet.http.HttpServlet.service (HttpServlet.java:722)

Теперь я знаю, что ошибка означает, что она не находит библиотеку данных Джексона. Я занимаюсь разработкой в Eclipse, и я знаю, что время от времени путь сборки сбивается, поэтому я также поместил библиотеки в папку WebContent \ WEB-INF \ lib. Это решило проблемы, которые у меня были раньше. Однако, на этот раз это не решает мою проблему. Я даже открыл файлы jar, чтобы физически проверить, что библиотека и необходимый класс есть, и они есть. Я попытался поискать и найти разные способы включения библиотеки, но ничего не помогло.

Можете ли вы сообщить нам, какую версию библиотеки Джексона вы используете? Knut Forkalsrud
Можете ли вы прокомментировать точную ссылку на файл аннотаций .jar? user2320244
Мне нужны две банки,jackson-core-lgpl-1.5.6.jar а такжеjackson-mapper-lgpl-1.5.6.jar Knut Forkalsrud
Выходит, мне не хватало третьей банки ... тьфу. Так просто. Мне нужно использовать библиотеки данных Джексона, ядро и аннотации. Я использую версию 2.0. Как только я нашел эту третью банку, она была счастлива. Однако, спасибо jhahn
Вы должны пометить ответ ниже TheSteve0

Ваш Ответ

5   ответов
127

Если ты только скопировал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
Можно ли даже писать и читать с Джексона с Джексона без ObjectMapper? CorayThan
Для тех, кто посещает сдальш будущее, вот новая ссылка для скачивания: Github.com / FasterXML / ДЖЕКСОН-аннотации / вики # загрузки Burke9077
и которые можно скачать с Wiki.fasterxml.com / JacksonDownload. (сохранить вас в Google.) ericsoco
В то время, в моем случае, можно было читать некоторые JSON без него. Я не уверен, каково положение вещей сейчас. i_am_jorf
Разве нет пути кн использовать аннотации? Я пробовал MapperFeature.USE_ANNOTATIONS, но мне, похоже, все еще нужна банка. Joel
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'
64

для пользователей 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>
работал и для меня. Благодарност siddhusingh
Спасибо, это сработало для меня после того, как я прочитал учебник по Twitter для Spring Acessing Spring.io / направляющие / гс / получающего доступ-твиттер wired00
1

как в моем случае простойmvn clean а такжеmvn install исправлена проблема.

0

эту ошибку (возможно, потому что вы нажали republish / clean),

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

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

Кроме того, я включил также зависимости от Йохана Шёберга

Похожие вопросы