Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java对象保存为JSON时发生JsonMappingException_Java_Json_Hibernate - Fatal编程技术网

将Java对象保存为JSON时发生JsonMappingException

将Java对象保存为JSON时发生JsonMappingException,java,json,hibernate,Java,Json,Hibernate,上面是我得到的一个例外,我的pojo中的非原语成员变量无法读取。在几次搜索之后,我尝试为我的POJO类添加@jsonautodect,并尝试为所有无法识别的字段添加@JsonProperty注释。这不起作用,所以我也尝试了@JsonIgnoreProperties({“hibernateLazyInitializer”,“handler”}),但也没有成功 下面是我尝试将对象转换为json的地方: org.codehaus.jackson.map.JsonMappingException: N

上面是我得到的一个例外,我的pojo中的非原语成员变量无法读取。在几次搜索之后,我尝试为我的POJO类添加
@jsonautodect
,并尝试为所有无法识别的字段添加
@JsonProperty
注释。这不起作用,所以我也尝试了
@JsonIgnoreProperties({“hibernateLazyInitializer”,“handler”})
,但也没有成功

下面是我尝试将对象转换为json的地方:

 org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) through reference chain..
@覆盖
公共地图getChanges(用户oldInfo、用户newInfo){
oldAndNewInfo=newhashmap();
objectWriter=new ObjectMapper().writer().withDefaultPrettyPrinter();
试一试{
oldAndNewInfo.put(objectWriter.writeValueAsString(oldInfo),objectWriter.writeValueAsString(newInfo));
}捕获(例外e){
e、 打印跟踪(ps);
}
返回新旧信息;
}

有人有什么想法吗?

我认为您应该禁用空bean上的SerializationConfig.Feature.FAIL\u属性

保持对象映射器内联的一个好方法(最好是将它们保存在某种模块中)

保护单例,Guice配置,Spring配置,一些单例的存储位置。 在我的示例中,我将使用一个受保护的单例,但这正是文档所说的

还要记住,用于xml或json的对象映射器构建起来非常昂贵。如果执行了大量序列化,请保存它

@Override
public Map<String, String> getChanges(User oldInfo, User newInfo) {
    oldAndNewInfo = new HashMap<String, String>();
    objectWriter = new ObjectMapper().writer().withDefaultPrettyPrinter();
    try {
        oldAndNewInfo.put(objectWriter.writeValueAsString(oldInfo), objectWriter.writeValueAsString(newInfo));
    } catch (Exception e) {
        e.printStackTrace(ps);
    }
    return oldAndNewInfo;
}
public abstract class JsonConfig{

    private JsonConfig(){

    }

    private static final ObjectMapper CONFIGURED_OBJECT_MAPPER;
    private static final JacksonJsonProvider JAX_RS_JSON_PROVIDER;

    static{
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        objectMapper.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);
        objectMapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, true);

        //and just incase you do some web transformaions with jersy or something

        JAX_RS_JSON_PROVIDER = new JacksonJsonProvider(objectMapper);

        CONFIGURED_OBJECT_MAPPER = objectMapper;    
    }

    public static ObjectMapper getObjectMapperInstance(){
        return CONFIGURED_OBJECT_MAPPER;
    }

    public static JacksonJsonProvider getJsonProviderInstance(){
       return return JAX_RS_JSON_PROVIDER
    }
}