相关疑难解决方法(0)

什么是瞬态和挥发性改性剂?

有人可以解释一下transientvolatile修饰符在Java中的含义吗?

java

119
推荐指数
3
解决办法
12万
查看次数

gson.toJson()抛出StackOverflowError

我想从我的对象生成一个JSON字符串:

Gson gson = new Gson();
String json = gson.toJson(item);
Run Code Online (Sandbox Code Playgroud)

每次我尝试这样做,我都会收到此错误:

14:46:40,236 ERROR [[BomItemToJSON]] Servlet.service() for servlet BomItemToJSON threw exception
java.lang.StackOverflowError
    at com.google.gson.stream.JsonWriter.string(JsonWriter.java:473)
    at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:347)
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:440)
    at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:235)
    at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:220)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:200)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
    at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:843)
Run Code Online (Sandbox Code Playgroud)

这些是我的BomItem类的属性:

private int itemId;
private Collection<BomModule> modules;
private boolean deprecated;
private String partNumber;
private String description; //LOB
private int quantity;
private String unitPriceDollar;
private String unitPriceEuro;
private String discount; 
private String totalDollar;
private …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow json object gson

75
推荐指数
5
解决办法
7万
查看次数

使用Gson和Kotlin 1.0 beta 4反序列化具有延迟属性的类

使用Gson,我想反序列化包含惰性属性的Kotlin类.

使用Kotlin 1.0 beta 4,在对象反序列化期间出现以下错误:

Caused by: java.lang.InstantiationException: can't instantiate class kotlin.Lazy
Run Code Online (Sandbox Code Playgroud)

使用Kotlin 1.0 beta 2,我曾经用@Transient annotaiton标记该属性,告诉Gson跳过它.使用beta 4,这是不可能的,因为注释会导致编译错误.

This annotation is not applicable to target 'member property without backing field'
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何解决这个问题.有任何想法吗?

编辑:lazy属性被序列化为JSON("my_lazy_prop$delegate":{}),但这不是我想要的,因为它是从其他属性计算的.我想如果我找到一种方法来阻止该属性被序列化,那么将会修复反序列化崩溃.

gson kotlin

23
推荐指数
3
解决办法
4836
查看次数

Jersey API + JPA/Hibernate Criteria Lazy Loading无法正常工作

这是一个简化的POJO我有:

@Entity
@Table( name = "Patient" )
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn
(
                name="Discriminator",
                discriminatorType=DiscriminatorType.STRING
                )
@DiscriminatorValue(value="P")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Patient implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "ID", unique = true, nullable = false)
    protected Integer ID;

    @ManyToOne(targetEntity = TelephoneType.class, fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="IDPhoneType")
    protected TelephoneType phoneType;


    @JsonProperty(required=false, value="phoneType")
    public TelephoneType getPhoneType() {
        return phoneType;
    }
    public void setPhoneType(TelephoneType phoneType) {
        this.phoneType = phoneType;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这是我的班级TelephoneType:

@Entity
@Table( name = "TelephoneType" ) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa lazy-loading jersey-2.0

10
推荐指数
1
解决办法
2009
查看次数

JPA2/Hibernate - 停止延迟加载?

我遇到了一个问题,即JPA在我不想要的时候试图懒洋洋地加载我的数据.基本上发生的事情是我正在使用服务来检索一些数据,当我将这些数据解析为JSON时,JSON库正在触发hibernate尝试并且懒洋洋地加载数据.有没有办法阻止这个?我在下面给出了一个例子.

// Web Controller method
public String getEmployeesByQuery(String query) {

    Gson gson = new Gson();
    List<Employee> employees = employeeService.findEmployeesByQuery(query);

    // Here is where the problem is occurring - the gson.toJSON() method is (I imagine)
    // using my getters to format the JSON output, which is triggering hibernate to
    // try and lazily load my data...
    return gson.toJSON(employees);
}
Run Code Online (Sandbox Code Playgroud)

是否可以将JPA/hibernate设置为不尝试并且懒惰地加载数据?

更新:我意识到你可以使用FetchType.EAGER - 但如果我不想急于加载那些数据呢?我只想阻止hibernate尝试检索更多数据 - 我已经拥有了我想要的数据.现在每当我尝试访问get()方法时,hibernate都会抛出"no session或session is closed"错误,这是有道理的,因为我的事务已经从我的服务中提交了.

谢谢!

java hibernate jpa gson

9
推荐指数
2
解决办法
9605
查看次数

解析JSON的Gson中的RuntimeException:无法调用受保护的java.lang.ClassLoader()而没有args

我继承了一些代码,使用Gson将我们的应用程序状态保存为JSON,然后使用fromJson读取它.

Gson gson = createGson();
gson.fromJson(objString, myClass);
Run Code Online (Sandbox Code Playgroud)

保存的其中一个字段是位置.不幸的是,非常偶尔解析保存的数据失败,因为我保存的Location在其mExtras中包含一个mClassLoader,而Gson库无法使用此错误创建ClassLoader:

RuntimeException:无法调用受保护的java.lang.ClassLoader()而没有args

有没有人知道为什么ClassLoader被包含在我的Location的附加内容中,以及它是否应该以JSON表示结尾?

我假设我可以通过单独保存位置对象中的关键字段(例如经度,纬度,高度,时间,精度)来解决这个问题,但如果可能的话,保存位置对象会很好.

我看到有一个我可以用来排除字段的ExclusionStrategy对象,但我不确定我是否可以/应该使用它来排除我位置内的额外内容...

仅供参考,这是我的Location对象的JSON数据(改变了经度和纬度以隐藏我):

{
    <snip>
    "lastKnownLocation": {
        "mResults": [
            0,
            0
        ],
        "mProvider": "gps",
        "mExtras": {
            "mParcelledData": {
                "mOwnObject": 1,
                "mObject": 5525040
            },
            "mClassLoader": {
                "packages": {}
            },
            "mMap": {},
            "mHasFds": false,
            "mFdsKnown": true,
            "mAllowFds": true
        },
        "mDistance": 0,
        "mTime": 1354658984849,
        "mAltitude": 5.199999809265137,
        "mLongitude": -122.4376,
        "mLon2": 0,
        "mLon1": 0,
        "mLatitude": 37.7577,
        "mLat1": 0,
        "mLat2": 0,
        "mInitialBearing": 0,
        "mHasSpeed": true,
        "mHasBearing": false,
        "mHasAltitude": true,
        "mHasAccuracy": …
Run Code Online (Sandbox Code Playgroud)

android location gson

7
推荐指数
1
解决办法
1万
查看次数

Servlet Gson().toJson无限循环

我在servlet中遇到了一些麻烦,每当我在下拉菜单中更改选项时,不同的值将传递给servlet,然后导致无限循环.当我没有在下拉列表中更改选项(值没有变化)时,没有错误.

这是我的代码:

我的Javascript:

<script>

function loadStaff(){
//dropdown
var positionDropDown = document.getElementById("positionsDropdown");
//value of the drop down
var positionID = positionDropDown.options[positionDropDown.selectedIndex].value;

    $.getJSON('loadStaff?positionID=' + positionID, function(data) {
            -- no populate code yet
});
}
</script>
Run Code Online (Sandbox Code Playgroud)

我的AjaxServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      String userPath = request.getServletPath();

    if (userPath.equals("/loadStaff")) {

        String positionID = request.getParameter("positionID");
        Position position = positionFacade.find(Integer.parseInt(positionID));
        Collection staffCollection = position.getStaffCollection();
        List<Staff> staffList = new ArrayList(staffCollection);

        String staffListJson = new Gson().toJson(staffList);
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(staffListJson);

    }

}
Run Code Online (Sandbox Code Playgroud)

在debuggig.错误出现在:

String …
Run Code Online (Sandbox Code Playgroud)

javascript java servlets gson

5
推荐指数
1
解决办法
9719
查看次数

如何忽略用于改造的模型中的一些变量

我正在使用Retrofit向我的服务器发送和接收请求.

我有一个类似下面的模型,我必须将它发送到我的服务器,但这个模型中的一些变量不能发送到服务器.

public class SelectedListModel implements Serializable {

  @SerializedName("p_id")
  @Expose
  private Long pId;

  @SerializedName("p_qty")
  @Expose
  private Double pQty;

  @Expose(serialize = false , deserialize = false)
  private String pName; //Have not to send to server

  @Expose(serialize = false , deserialize = false)
  private String pPrice; //Have not to send to server

  @Expose(serialize = false , deserialize = false)
  private String pImageUrl; //Have not to send to server
}
Run Code Online (Sandbox Code Playgroud)

因此,我从服务器得到的回复是400.我用它@Expose(serialize = false, deserialize = false)来忽略那些没有发送到服务器的变量.但它不起作用.有没有办法做到这一点,或者我必须为我的服务器创建另一个模型?

android gson retrofit2

5
推荐指数
2
解决办法
2056
查看次数

如何在 JSON 响应中仅获取实体 ID 而不是整个实体

我看到了几个类似的问题,但没有一个对我有用的答案。我正在努力将现有项目转换为使用 Hibernate。我使用 Mysql 作为数据库。我有一堂这样的课:

@Entity
@Table(name = "user")
public class User {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "user_id")
   private Long userId;

   @ManyToOne
   @JoinColumn(name = "group_id_user")
   private Group group;

   @Column(name = "name")
   private String name;

   ...
   // getters and setters....   
}
Run Code Online (Sandbox Code Playgroud)

和这样的类:

@Entity
@Table(name = "group")
public class Group {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "group_id")
   private Long groupId;

   @Column(name="group_name")
   private String groupName;

   ...
   // getters and setters....   
}
Run Code Online (Sandbox Code Playgroud)

User当我从数据库中获取项目时,我将其转换为 JSON 并最终得到以下格式的结果:

{
    "user": {
        "userId": 1,
        "group": …
Run Code Online (Sandbox Code Playgroud)

java json annotations hibernate

5
推荐指数
2
解决办法
7954
查看次数

无法使用Gson将对象(使用Room DB)序列化为json字符串

我有一个类Item(见下文),其中我使用了一些Room db注释.它还有一个名为ItemInfo的嵌套类.这两个类都有一个空构造函数.

问题是,当我尝试序列化Item类的对象时,应用程序崩溃时出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.android.carrymates, PID: 18526
              java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible
                  at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:133)
                  at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:119)
                  at com.google.gson.internal.reflect.PreJava9ReflectionAccessor.makeAccessible(PreJava9ReflectionAccessor.java:31)
                  at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:103)
                  at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:85)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
                  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
                  at com.google.gson.Gson.getAdapter(Gson.java:458)
                  at com.google.gson.Gson.toJson(Gson.java:696)
                  at …
Run Code Online (Sandbox Code Playgroud)

java android gson android-room

5
推荐指数
1
解决办法
750
查看次数