josn转换hibernate的po对象出错问题
来源:互联网 发布:数控编程代码大全 编辑:程序博客网 时间:2024/05/20 23:31
easyui+hibernate+springmvc是一个非常常见的框架
但是你可能遇到一个问题,当hibernate中配置了很多一对多,多对多关系的时候,你采用的是懒加载。
springMVC 返回josn形式的时候,会不断进行加载,十分浪费资源,同时还报错。
网上有一些解决办法我总结了一下
1.我采用的办法。@JsonIgnore忽略属性
@OneToMany(fetch = FetchType.LAZY)@JoinColumn(name = "fid")@JsonIgnorepublic Set<TRf> getRoles() {return roles;}public void setRoles(Set<TRf> roles) {this.roles = roles;}
将不想加载的属性,进行josn解析的时候忽略。同时注意此注解包 import org.codehaus.jackson.annotate.JsonIgnore;
2.网上的一个方法将vo 和po分离。vo作为easyui的显示部分。
每次查询出po 都建立一个vo 。将po复制到vo 中。 采用import org.apache.commons.beanutils.BeanUtils; 下的BeanUtils.copyProperties(obj obj2)方法。将同名的属性进行复制。
3.还有很多方法,大家自己想吧。我提供一些注解,有很多我没有实验成功,看哪位大牛实验好了,请留言谢谢。
1 排除属性
@JsonIgnore,一般标记在属性或方法上;作用于序列化与反序列化;
@JsonIgnoreProperties,如果是代理类,由于无法标记在属性或方法上,所以,可以标记在类声明上;也作用于反序列化时的字段解析;
2 属性别名
@JsonProperty,序列化/反序列化都有效;
3 属性排序
@JsonPropertyOrder,注释在类声明中;
4 属性格式转换
使用自定义序列化/反序列化来处理;
@JsonSerialize,序列化;
@JsonDeserialize,反序列化;
注意:在使用hibernate的时候,查询数据库后产生的实体类是个代理类,这时候转换JSON会报错;
解决方法有两种:
1)设置FAIL_ON_EMPTY_BEANS属性,告诉Jackson空对象不要抛异常;
mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS);
2)使用@JsonIgnoreProperties注解
在实体类声明处加上@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})注解;
建议使用@JsonIgnoreProperties注解,这样生成的JSON中不会产生多余的字段;
5 父/子关联
@JsonManagedReference,放在父亲类中;
@JsonBackReference,放在孩子类中;
6 去掉包装
@JsonUnwrapped,意思如下:
Ability to map JSON like
{
"name" : "home",
"latitude" : 127,
"longitude" : 345
}
to classes defined as:
class Place {
public String name;
@JsonUnwrapped
public Location location;
}
class Location {
public int latitude, longitude;
}
参考:
http://wiki.fasterxml.com/JacksonAnnotations
http://www.cowtowncoder.com/blog/archives/2011/10/entry_463.html
http://www.07net01.com/linux/Jacksonzhujiexuexicankao_44238_1356358422.html
方法3代码来自点击打开链接。借鉴一下,非常感谢。 0 0
- josn转换hibernate的po对象出错问题
- josn.jar转换复杂对象的有关问题? (多个set属性)
- 解决Hibernate查询时,po.po.po的问题!
- js josn 对象转换成字符串
- Hibernate——VO对象与PO对象的区别
- Jackson 解析Josn时如果属性首字母大写出错的问题
- Hibernate 对象PO的save()与persist()方法的区别
- hibernate中po对象的三种状态分析
- hibernate中po对象的三种状态分析
- hibernate中po对象的三种状态分析
- Hibernate中po对象的三种状态分析
- Hibernate中po对象的三种状态
- 实现JOSN与Xml的相互转换
- JOSN传递对象数据类型的原理
- JOSN传递对象数据类型的原理
- Spring MVC返回hibernate对象序列化json报懒加载出错的问题
- java对象和josn对象之间的互相装换
- DTO,BO, PO之间的转换可以用这个框架;java 对象转换
- 终端请求中文乱码问题解决
- 结构体与指针
- 定位
- 工单导入接口和标准API
- OpenStack商用需要跨越的坎 -- 1. 虚拟化平台的选择和整合
- josn转换hibernate的po对象出错问题
- 7620 Uboot编译配置
- JAVA反射机制之一
- js 控制页面的隐藏与显示
- 基于索引的SQL语句优化之降龙十八掌
- ubuntu下安装tomcate + eclipse环境心得笔记
- VS2008 ActiveX IObjectSavety IExpress打包cab,发布
- 悬浮控件开发笔记
- UILabel文字过长时的显示格式