gpt4 book ai didi

java - 序列化 OrientDB RecordID 时无限递归

转载 作者:行者123 更新时间:2023-11-30 09:26:49 27 4
gpt4 key购买 nike

在我的架构中,我有一个像这样的抽象类:

@JsonAutoDetect(JsonMethod.NONE)
public abstract class AbstractEntity {

@Id private Object id;
@Version private Integer version;

public AbstractEntity() {}

@JsonProperty // this annotation causes infinite recursion
public Object getId() { return id; }

}

此类用作每个实体的父类(super class),例如:

@JsonAutoDetect(JsonMethod.NONE)
public class Usuario extends AbstractEntity {

private Cadastro cadastro;

protected Usuario() {}

public Usuario(Cadastro cadastro) {
setCadastro(cadastro);
}

@JsonProperty
public Cadastro getCadastro() { return cadastro; }

@JsonProperty
public void setCadastro(Cadastro cadastro) { this.cadastro = cadastro; }

}

我正在设计一个 REST 层,它允许用户通过 JSON 请求/响应在数据库中创建记录:

@POST
@Path("cadastrar")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response cadastrar(@Context HttpServletRequest request, Cadastro cadastro) {
OObjectDatabaseTx bd = (OObjectDatabaseTx) request.getAttribute("object.database.tx");

try {

bd.begin();
Usuario usuario = new Usuario(cadastro);
usuario = bd.save(usuario);
bd.commit();

String json = new ObjectMapper().writeValueAsString(usuario);
Response response = Response.status(HttpURLConnection.HTTP_CREATED).entity(json).build();

return response;
(...)

但是,在最后一个方法中,当我调用 Jackson 序列化我新创建的实体时(在 writeValueAsString 方法中),我得到了一个无限递归:

org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain:
com.orientechnologies.orient.core.id.ORecordId["record"]->com.orientechnologies.orient.core.record.impl.ODocument["identity"]
->com.orientechnologies.orient.core.id.ORecordId["record"]->com.orientechnologies.orient.core.record.impl.ODocument["identity"]
->com.orientechnologies.orient.core.id.ORecordId["record"]->com.orientechnologies.orient.core.record.impl.ODoc...

我可以通过从 AbstractEntity 类的 getId 方法中删除 @JsonProperty 来避免无限递归。但是,这样 id 属性将不会出现在 JSON 响应中。

那么,我该如何序列化 id 属性呢?

谢谢!

最佳答案

Jackson 支持循环引用吗?是这样吗?

关于java - 序列化 OrientDB RecordID 时无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835800/

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