gpt4 book ai didi

java - Json 使用 Jackson 库序列化 JDK 动态代理

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:26 28 4
gpt4 key购买 nike

我正在尝试使用 Jackson 库序列化 Java 动态代理,但出现此错误:

public interface IPlanet {
String getName();
}

Planet implements IPlanet {
private String name;
public String getName(){return name;}
public String setName(String iName){name = iName;}
}

IPlanet ip = ObjectsUtil.getProxy(IPlanet.class, p);
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(ip);

//The proxy generation utility is implemented in this way:
/**
* Create new proxy object that give the access only to the method of the specified
* interface.
*
* @param type
* @param obj
* @return
*/
public static <T> T getProxy(Class<T> type, Object obj) {
class ProxyUtil implements InvocationHandler {
Object obj;
public ProxyUtil(Object o) {
obj = o;
}
@Override
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
Object result = null;
result = m.invoke(obj, args);
return result;
}
}
// TODO: The suppress warning is needed cause JDK class java.lang.reflect.Proxy
// needs generics
@SuppressWarnings("unchecked")
T proxy = (T) Proxy.newProxyInstance(type.getClassLoader(), new Class[] { type },
new ProxyUtil(obj));
return proxy;
}

我得到这个异常:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class $Proxy11 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS) )

问题似乎与序列化 hibernate 代理对象时发生的问题相同,但我不知道如何以及是否可以使用 Jackson-hibernate-module 来解决我的问题。

更新:该BUG从Jackson 2.0.6版本开始解决

最佳答案

您可以试试 Genson 库 http://code.google.com/p/genson/ .我刚刚用它测试了你的代码,它工作正常,输出是 {"name":"foo"}

Planet p = new Planet();
p.setName("foo");
IPlanet ip = getProxy(IPlanet.class, p);
Genson genson = new Genson();
System.out.println(genson.serialize(ip));

它有一些其他图书馆所没有的不错的功能。例如在运行时使用带参数的构造函数或在运行时在对象上应用所谓的 BeanView(作为模型的 View ),可以反序列化为具体类型,等等...看看 wiki http://code.google.com/p/genson/wiki/GettingStarted .

关于java - Json 使用 Jackson 库序列化 JDK 动态代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112564/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com