【发布时间】:2012-05-16 21:31:40
【问题描述】:
我正在开发一个 Java EE 6.0 RESTful 应用程序并且我正在使用 Hibernate。我需要在序列化之前取消代理我的延迟加载对象(实际上是实体的延迟加载实体属性)以避免 LazyInitializationException。我已经通过在序列化实体之前编写了一些实用程序来成功地使用 AMF 服务完成此操作。
我正在使用 Jersey JAX-RS 实现,我需要对 Jackson 执行此操作。我在 BeanSerializer 中找到了一个地方,我相信可以进行取消代理并且工作正常,但我需要以这种方式更改库类,我不想这样做。
所以这里是我更改后的 BeanSerializer.serialize 方法:
@Override
public final void serialize(Object bean, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
bean = Util.deproxy(bean); // ***** Deproxy the bean here *****
jgen.writeStartObject();
if (_propertyFilterId != null) {
serializeFieldsFiltered(bean, jgen, provider);
} else {
serializeFields(bean, jgen, provider);
}
jgen.writeEndObject();
}
我的问题是如何在不更改库类(BeanSerializer)的情况下做到这一点?如果有适当的方法,我不喜欢这种黑客攻击。
【问题讨论】:
-
这篇文章可能对你有所帮助stackoverflow.com/q/2216547/797704
-
@richarbernal 谢谢,但我不明白这有什么帮助