您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Hibernate用户和朋友JsonReference

Hibernate用户和朋友JsonReference

我做的。再次。StackOverFlow给我的动力比问题大:D

因此,经过每小时3天漫长的思考,我的问题几乎消失了,我几乎拒绝对json进行反序列化,并在这种情况下决定不使用json,但比起考虑类的jsonidentity,这是我的解决方案。

使用JsonIdentityInfo,Jackson每次序列化您的对象时,都会向其添加一个id(在我的情况下是uuid),这样它就不会总是扫描它。

不幸的是,当我在不同的情况下测试我的解决方案时,发现它仅适用于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
}
其他 2022/1/1 18:13:33 有797人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶