怎样使用Fastjson转换CGLIB生成的代理对象?
import java.lang.reflect.Method;
import com.alibaba.fastjson.JSON;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class Test03 {
interface User {
String getName();
void setName(String name);
}
static class UserImpl implements User {
private String name = "user";
@Override
public String getName() {
return this.name;
}
@Override
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
User user = (User) Enhancer.create(User.class, new MethodInterceptor() {
User impl = new UserImpl();
@Override
public Object intercept(Object target, Method method, Object[] args, MethodProxy methodProxy)
throws Throwable {
return methodProxy.invoke(impl, args);
}
});
System.out.println(JSON.toJSONString(user));
user = new UserImpl();
System.out.println(JSON.toJSONString(user));
}
输出结果依次为:
{}
{"name":"user"}
求大神指点,如何将CGLIB生成的代理对象转化为json字符串。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的代码是没有问题的,问题出在fastjson上(虽然这也不算是fastjson的错)
fastjson在初始化序列化器的时候,有这么一段代码:
这个TypeUtils.isProxy方法:
显然是说,如果有增强代理,就使用clazz.getSuperclass(),也就是说,你用接口的话是没有用的。。。
所以这里有两个解决方案:
1.不用fastjson,用jackson就可以解决
2.在增强代理的时候,使用UserImpl.class