栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate用户和朋友JsonReference

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate用户和朋友JsonReference

我做的。再次。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}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号