`
nbkangta
  • 浏览: 424281 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

hibernate领域对象转json

阅读更多

另外一种处理hibernate转json字符串的解决方案

 

java.lang.NoSuchMethodException: Property 'delegate' has no getter method

 

JsonBeanProcessor:

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processor.JsonBeanProcessor;
 
public class HibernateJsonBeanProcessor implements JsonBeanProcessor {
 
    public JSONObject processBean(Object obj, JsonConfig jsonConfig) {
        return new JSONObject();
    }
 
}

 JsonBeanProcessorMatcher:

import net.sf.json.processor.JsonBeanProcessorMatcher;
import java.util.Set;
import org.apache.log4j.Logger;
 
public class HibernateJsonBeanProcessorMatcher extends JsonBeanProcessorMatcher {
    
    private static Logger log = Logger.getLogger(HibernateJsonBeanProcessorMatcher.class);
    
    @Override
    public Object getMatch(Class target, Set set) {
        if (target.getName().contains("$$EnhancerByCGLIB$$")) {
            log.warn("Found Lazy-References in Hibernate object "
                    + target.getName());
            return org.hibernate.proxy.HibernateProxy.class;
        }
        return DEFAULT.getMatch(target, set);
    }
 
}

 为JsonConfig注册BeanProcessor和JsonBeanProcessorMatche:

sonConfig conf = new JsonConfig();
conf.registerJsonBeanProcessor(org.hibernate.proxy.HibernateProxy.class, 
    new HibernateJsonBeanProcessor());
conf.setJsonBeanProcessorMatcher(new HibernateJsonBeanProcessorMatcher());
 
分享到:
评论
2 楼 nbkangta 2009-08-14  
mayanyun1986 写道
异常不报啦,但是输出却是空。
public static String getJsonFromBean(Person bean) {
JsonConfig conf = new JsonConfig();
conf.registerJsonBeanProcessor(org.hibernate.proxy.HibernateProxy.class,
new HibernateJsonBeanProcessor());
conf.setJsonBeanProcessorMatcher(new HibernateJsonBeanProcessorMatcher());
JSONObject jr = JSONObject.fromObject(bean,conf);
System.out.println("jr:"+jr.toString());
return jr.toString();
}

上面的做法都是跳过hibernate cglib增强对象的办法,特别是为了跳过one to many这些属性。
如果目标是把整个PO持久化,还是同个setter/getter把hibernate PO变成VO,在进行这一步的好,我通常是用BeanUtils
1 楼 mayanyun1986 2009-08-10  
异常不报啦,但是输出却是空。
public static String getJsonFromBean(Person bean) {
JsonConfig conf = new JsonConfig();
conf.registerJsonBeanProcessor(org.hibernate.proxy.HibernateProxy.class,
new HibernateJsonBeanProcessor());
conf.setJsonBeanProcessorMatcher(new HibernateJsonBeanProcessorMatcher());
JSONObject jr = JSONObject.fromObject(bean,conf);
System.out.println("jr:"+jr.toString());
return jr.toString();
}

相关推荐

Global site tag (gtag.js) - Google Analytics