gpt4 book ai didi

java - 如何使用 GSON 传递 JPA 实体?

转载 作者:行者123 更新时间:2023-11-30 09:37:59 25 4
gpt4 key购买 nike

我正在使用 GSON 将名为 Profile 的 JPA 实体从我的服务器传递到客户端

@Entity  
public class Profile implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
.
.
.
}

GSON 代码:

Gson gson = new Gson();
Profile profile = gson.fromJson(json, Profile.class);

但是我得到:

java.lang.NoClassDefFoundError: javax.persistence.Id
java.lang.reflect.Field.getDeclaredAnnotations(Native Method)
java.lang.reflect.Field.getDeclaredAnnotations(Field.java:188)
java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:188)
java.lang.reflect.AccessibleObject.getAnnotation(AccessibleObject.java:196)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldName(ReflectiveTypeAdapt erFactory.java:60)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
com.google.gson.Gson.getAdapter(Gson.java:353)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
com.google.gson.Gson.getAdapter(Gson.java:353)
com.google.gson.Gson.fromJson(Gson.java:754)
com.google.gson.Gson.fromJson(Gson.java:721)
com.google.gson.Gson.fromJson(Gson.java:670)
com.google.gson.Gson.fromJson(Gson.java:642)

我需要做什么来解决这个问题?

最佳答案

IIRC,当您从 EJB 检索对象时,它不是您定义的类,而是 JPA 创建的 stub 类(它扩展了您的类)。由于 GSON 使用反射(从而绕过提供的方法,这符合您的类规范-)它正在检索 stub 的内部元素(这不是您所期望的)。

您可以通过对检索到的对象执行 getClass() 来检查它。

至于如何解决,你有两种选择:

a) 通过复制 JPA 返回的对象来创建您的对象。

b) 找到一种方法告诉 GSON 使用类方法而不是反射来检索数据(我不知道这种方法是否存在)。

我不知道是否有某种方法可以自动从 JPA stub 中检索内部对象。

关于java - 如何使用 GSON 传递 JPA 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10303247/

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