目前我在反序列化某些内部对象时遇到问题,在spring中,我使用@ResponseBody
在输出之前初始化所有对象。
例如,这是一个响应:
[{id:1, location:{id:1, ... extra location data}},
{id:2, location:1}
]
现在,GSON会抛出错误,因为它无法理解
location:1
已经在前一个对象中反序列化的位置对象。
反序列化是在以下方法中完成的:@Override
public void handleReader(Reader reader) {
try {
String json = readerToString(reader);
T object = getGson().fromJson(json, returnType);
handleObject(object);
} catch (Exception e) {
Sentry.captureException(e);
}
}
作为一个例子,如果我要通过一个普通的泛型类来调用它,我会使用类型
Event[]
作为T泛型类型以返回一个数组。我该如何使用Gson修复这个问题或让Spring每次输出完整数据?理想情况下,我希望使用Gson修复,因为它可以大大减少带宽,但现在我并不是太在意。
我的Spring返回方法如下:
@Override
public List<T> list() {
return service.findAll();
}
使用以下初始化:
@Override
@Transactional
public List<Event> findAll() {
List<Event> list = eventRepository.findByArchivedFalse();
for (Event event : list) {
this.initialize(event);
}
return list;
}
@Override
public Event initialize(Event obj) {
Hibernate.initialize(obj.getLocation());
Hibernate.initialize(obj.getLocation().get... inner data here);
return obj;
}
我想这将需要进行真正的结构审查,但如果可以的话,我希望保持结构大致相同。