提问者:小点点

Java对象到Json不工作使用杰克逊对象映射器


所以从长远来看,我试图在Java为我的顶点项目编写一个提醒应用程序。现在我正在尝试将一些代码写入json文件,以便保存信息,但我遇到了这个异常。我将jar文件导入到我的项目中,所以我不确定为什么它似乎无法访问它。我能做些什么来解决这个问题吗?

这是我java的项目构建路径。我使用eclipse,由于某种原因它有这个模块路径和类路径。我不知道两者之间的区别,但是如果我把jar放在模块路径中,它会出错。

package util;

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JsonUtil {
    private static ObjectMapper mapper;
    static {
        mapper = new ObjectMapper();
    }
    public static String convertJavaToJson(Object object)
    {
        String jsonResult = "";
        try {
            jsonResult = mapper.writeValueAsString(object);
        } 
        catch (JsonGenerationException e) {
            System.out.println("1 Exception Occured while converting Java Object into Json -->" + e.getMessage());
        }
        catch (JsonMappingException e) {
            System.out.println("2 Exception Occured while converting Java Object into Json -->" + e.getMessage());
        }
        catch (IOException e) {
            System.out.println("3 Exception Occured while converting Java Object into Json -->" + e.getMessage());
        }
        catch (Exception e) {
            System.out.println("4 Exception Occured while converting Java Object into Json -->" + e.getMessage());
        }
        return jsonResult;
    }
}

异常来自最后的catch块

4 Exception Occured while converting Java Object into Json -->Failed to instantiate standard serializer (of type org.codehaus.jackson.map.ser.std.NullSerializer): class org.codehaus.jackson.map.ser.BasicSerializerFactory cannot access a member of class org.codehaus.jackson.map.ser.std.NullSerializer with modifiers "private"

感谢任何帮助!


共1个答案

匿名用户

此代码适用于我,但我有此导入:

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

因为我使用依赖项com. fasterxml.jackson.core:jackson-datind(版本2.9.9.3)。

正如Lino所说,org. codehaus.jackson有点旧。

此外,您可以更改:

private static ObjectMapper mapper;
    static {
        mapper = new ObjectMapper();
    }

通过:

private static ObjectMapper mapper = new ObjectMapper();