
我做的。再次。StackOverFlow给我的动力比问题大:D
因此,经过每小时3天漫长的思考,我的问题几乎消失了,我几乎拒绝对json进行反序列化,并在这种情况下决定不使用json,但比起考虑类的jsonidentity,这是我的解决方案。
使用JsonIdentityInfo,Jackson每次序列化您的对象时,都会向其添加一个id(在我的情况下是uuid),这样它就不会总是扫描它。
UPDATE ASNWER(我删除了答案的代码先前版本以缩短答案):
不幸的是,当我在不同的情况下测试我的解决方案时,发现它仅适用于json身份的第一个版本。因此,第一次“扫描”完全像一个咒语一样工作,但是第二次扫描却得到了jsonidentity而不是对象的ID。这使我了解到,我需要自己的序列化逻辑,可以在其中控制递归深度。我写的。我只能显示自定义json
serializator的骨架,因为序列化的逻辑很容易并且取决于类结构。
public class JsonUserSerializer extends JsonSerializer<User> { @Override public void serialize(User o, JsonGenerator jsonGen, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { // ... logic of json generation Field[] userClassFields = o.getClass().getDeclaredFields(); // ... logic of json generation } @Override public Class<User> handledType() { return User.class; } }我在处理代码时必须解决的主要问题是字段的命名。因为是json结构,所以它是:“ name”:“ value”-在我的情况下是名称-
它是fieldName。但是硬编码不是我的方法。比我已经找到了获取类的所有字段的解决方案,
o.getClass().getDeclaredFields()而不是按索引查找需求字段的解决方案。我认为这不是最好的解决方案,但是一个小时我都没有找到其他解决方案(如果您知道其他方法,请写评论-
我会为此推荐作者)。
忘记显示如何使用为特定类指定的定制JsonSerialiser:
@Entity@Table(name = "users")@JsonSerialize(using = JsonUserSerializer.class)public class User implements Serializable { // a lot of fields and getter, and setters}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)