有人可以建议一种编组和解组javaassyst代理对象的方法。我想要像JAXB或xstream方法。 目前我只看到解决这个问题的一种方法
这种方法似乎效率低下,有没有人有更好的想法?
答案 0 :(得分:0)
如果基类使用Jackson json注释进行注释,那么它是代理的事实不会影响编组。以下是将代理对象编组为JSON的示例。
import javassist.util.proxy.MethodHandler;
import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args){
try {
Bar bar = create(Bar.class);
bar.setBar("something");
ObjectMapper mapper = new ObjectMapper();
String out = mapper.writeValueAsString(bar);
Bar inBar = mapper.readValue(out, bar.getClass());
System.out.println("Unmarshalled: " + inBar.getClass().getName() + " , bar: " + inBar.getBar());
} catch (Exception e) {
e.printStackTrace();
}
}
public static <T> T create(Class<T> classs) throws Exception {
ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(classs);
Class clazz = factory.createClass();
MethodHandler handler = new MethodHandler() {
@Override
public Object invoke(Object self, Method overridden, Method forwarder,
Object[] args) throws Throwable {
System.out.println("I could be used for AOP "+overridden.getName());
return forwarder.invoke(self, args);
}
};
Object instance = clazz.newInstance();
((ProxyObject) instance).setHandler(handler);
return (T) instance;
}
}
class Bar{
@JsonProperty
private String bar = "bar";
String getBar() {
return bar;
}
void setBar(String bar) {
this.bar = bar;
}
}