使用Gson策略时出现堆栈溢出异常

时间:2018-04-04 09:00:47

标签: java json gson

我试图将对象保存为json字符串的文件!但是当我尝试在没有ExclusionStrategy的情况下为GsonBuilder做的时候,它给了我一个"重复的名字在Json Exception字段hashCode_在我的班级" !我在谷歌搜索并找到了一个解决方案,我应该使用ExclusionStrategy并跳过一些游戏!所以我这样做了,这次我得到了Stack溢出异常!我不知道该做什么,在互联网上似乎没有这个问题的答案!

这是我的convertToJsonString方法:

public static <E> String convertToJsonString(E e) {

    ExclusionStrategy strategy = new ExclusionStrategy() {
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            if(f.getName().equals("hashCode_"))
                return true;

            return false;
        }

        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }
    };
    gson=new GsonBuilder().setExclusionStrategies(strategy).create();
    return gson.toJson(e);
}

这是我制作JsonElement的地方

   public static <E> JsonElement createJsonElement(E e) {
      return gson.toJsonTree(e);
   }

这就是我将jsonString保存到文件的地方:

   public void writeToFileHotel(Hotel hotel) {

   JsonElement element= JsonUtils.createJsonElement(hotel);
    JsonUtils.writeJsonToFile(element,allGiataHotels_File);
}

这是我的例外,没有ExclusionStrategy

  Exception in thread "main" java.lang.IllegalArgumentException: class 
  ir.viratech.tickbed.model.user.AgencyUser declares multiple JSON fields 
  named hashCode_

这是ExclusionStrategy的例外

  Exception in thread "main" java.lang.StackOverflowError

注意:在JsonElement element = JsonUtils.createJsonElement(hotel)line

上确认了IllegalArgumentException异常

1 个答案:

答案 0 :(得分:0)

当您的对象存在循环依赖时,会发生Stackoverflow错误。

您可能需要使用TypeAdapter