当前位置: 首页 > 知识库问答 >
问题:

解析JSON对象时NoClassDefFoundError JsonAutoDetect

苍宜修
2023-03-14

我正在使用Amazon的云服务开发一个webapp,我需要使用JSON对象。我的项目是如何设置的,我有一个HTML表单,用户将在其中填写信息并提交。一旦提交,数据将被放入在线数据库,并向他们发送确认电子邮件。在将数据提交到数据库之前,我需要将所有数据放入JSON对象中。我的servlet是用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
        html" target="_blank">mapper.writeValue(user, userData);
        return user;
    }
}

使用此代码提交表单时,会收到以下错误消息:

java.lang.NoClassDefFoundError: com/Fast erxml/jackson/注释/JsonAutoDetectcom.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.do获取(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文件来物理检查所需的库和类是否在那里,而且它们在那里。我尝试了四处搜索并寻找不同的方法来包含库,但似乎没有任何效果。

共有3个答案

胡飞鹏
2023-03-14

或以下渐变配置

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'
林威
2023-03-14

为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>
浦德明
2023-03-14

对于将来来到这里的人,答案是:

如果您只复制了jackson core和jackson databind,则需要jackson注解才能使用ObjectMapper。

例如,确保你有这样的东西:

[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
 类似资料:
  • 问题内容: 我无法理解如何使用Visual .NET将JSON字符串解析为c#对象。任务很简单,但是我仍然迷路…我得到了这个字符串: 这是我尝试进行消毒的代码: 我不知道在’<’和’>’之间放置什么,从网上阅读的内容中,我必须为其创建一个新的类。另外,如何获得输出?一个例子会有所帮助! 问题答案: 创建一个可以反序列化您的JSON的新类,例如:

  • 问题内容: 我收到的JSON对象为: 它打印: 但现在我无法读取其中的任何内容。我如何获得“电子邮件”字段? 谢谢 问题答案: 您应该按照以下方式进行操作: 如果我没错的话。

  • 我想由jackson将json更改为object,对象包含类型字段。 例外情况: 豆子: 我提供了setter/getter和字段can的一一映射。我使用的将json更改为object。

  • 问题内容: 我有JSON对象,如下所示: 在Java中,我想解析上述json对象并将值存储在arraylist中。 我正在寻找一些代码来实现这一目标。 问题答案: 我假设你想将interestKeys存储在列表中。 使用库:

  • 问题内容: 我有一个使用JSON解析过的javascript对象,现在我想打印该对象,以便对其进行调试(该函数出了点问题)。当我执行以下操作时… 我列出了多个[object Object]。我想知道如何打印此内容以查看内容? 问题答案: 大多数调试器控制台都支持直接显示对象。只需使用 根据您的调试器,这很可能会将对象在控制台中显示为折叠的树。您可以打开树并检查对象。

  • 问题内容: 我正在使用Java中的对象进行基本的HTTP身份验证。 我期待一个JSON对象,或者是有效JSON对象格式的字符串数据,或者是带有简单纯文本(即有效JSON)的HTML。返回响应后如何从中访问它? 问题答案: 您可以使用以下方法获取原始数据。顺便说一句,此模式适用于Java6。如果您使用的是Java 7或更高版本,请考虑try-with- resources模式 。 然后,您可以将返回