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