【发布时间】:2016-01-27 08:31:58
【问题描述】:
作为标题,我使用 Jersey 以 JSON 形式返回一个对象,但该对象是由 cglib 代理创建的:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("test")
public Response test() {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(A.class);
enhancer.setCallback(new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return "my name";
}
});
return Response.ok(enhancer.create()).build();
}
@Data
@XmlAccessorType(XmlAccessType.PROPERTY)
public static class A {
private String name;
}
它不能工作,因为enhancer.create()返回的是A类的代理对象,而不是A类的真实对象。
org.codehaus.jackson.map.JsonMappingException:找不到序列化程序 类 MyREST$1 并且没有发现用于创建 BeanSerializer 的属性 (为避免异常,禁用 SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))(通过引用 链:MyREST$A$$EnhancerByCGLIB$$fdcf8406["callbacks"])
【问题讨论】:
-
您陈述了问题,但您对答案的期望是什么?
-
@hotzst 我的期望是实现 InvocationHandler 以告诉 Jackson 库获取正确的字段和属性
标签: java proxy jersey jackson cglib