【问题标题】:Why is Pojo2Json converter (using Jackson) looping为什么 Pojo2Json 转换器(使用杰克逊)循环
【发布时间】:2021-08-18 16:05:36
【问题描述】:

为了将一组 Pojos 转换为 Json 字符串,我发现了几个描述,例如 https://brunozambiazi.wordpress.com/2015/08/15/working-with-json-in-java/

并创建了以下方法:

public static String convertObjectToJsonString(Object pojo) throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    String dataAsJsonString = mapper.writeValueAsString(pojo);
    return dataAsJsonString;
}


and tried to test it with 

@Test
void getDataAsJson() throws Exception {
    User user = new User("5", "theName", "theEmail", "theGender", "theStatus");
    final String jsonObj = PojoToJsonConverter.convertObjectToJsonString(user);
    System.out.println( jsonObj );
}

但它在第 24 行抛出了一个 stackoverflow,即 mapper.writeValueAsString(pojo); 我没有找到有意义的解释。

java.lang.StackOverflowError
  at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector._findFields(AnnotatedFieldCollector.java:58)
  at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collect(AnnotatedFieldCollector.java:41)
  at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collectFields(AnnotatedFieldCollector.java:36)
  at com.fasterxml.jackson.databind.introspect.AnnotatedClass._fields(AnnotatedClass.java:349)
  at com.fasterxml.jackson.databind.introspect.AnnotatedClass.fields(AnnotatedClass.java:321)
  at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addFields(POJOPropertiesCollector.java:379)
  at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:308)
  at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getJsonValueAccessor(POJOPropertiesCollector.java:196)
  at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findJsonValueAccessor(BasicBeanDescription.java:252)
  at com.fasterxml.jackson.databind.ser.BasicSerializerFactory.findSerializerByAnnotations(BasicSerializerFactory.java:346)
  at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:216)
  at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:165)
  at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1388)
  at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1336)
  at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:510)
  at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:713)
  at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:308)
  at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4110)
  at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3413)
  at ch.automatedtesting.gorestinfra.impl.businessobjects.PojoToJsonConverter.convertObjectToJsonString(PojoToJsonConverter.java:24)


This is the Pojo for User:

  public class User  implements BusinessObject {

  public static final String USER_ID      = "id";
  public static final String USER_NAME    = "name";
  public static final String USER_EMAIL   = "email";
  public static final String USER_GENDER  = "gender";
  public static final String USER_STATUS  = "status";

  private String id;
  private String name;
  private String email;
  private String gender;
  private String status;

  public User(String id, String name, String email, String gender, String status) {
      this.id = id;
      this.name = name;
      this.email = email;
      this.gender = gender;
      this.status = status;
  }

  public User(String id) {
      this(id, "", "", "", "");
  }


  public String getId() {
      return id;
  }

  public String getName() {
      return name;
  }

  public String getEmail() {
      return email;
  }

  public String getGender() {
      return gender;
  }

  public String getStatus() {
      return status;
  }


}


【问题讨论】:

  • 请添加您的用户类别
  • 感谢 Darren 的出色管理!我认为 Pojo 的帖子会很长。现在让我印象深刻的是,每一个细节都经过检查,真的很酷。
  • BusinessObject 界面中有什么内容?
  • 它是一个空标记界面
  • Hei Darren,代码在关闭 intellij 和机器后工作。对此感到抱歉,非常感谢您的努力!

标签: java json jackson pojo


【解决方案1】:

我在我的项目中安装了示例,它运行没有问题。 然后我将 Pojo2JsonConverter 与示例用户一起使用,它起作用了。 最终,我用与以前相同的代码替换了发布的 User 类 - 它工作正常。
我唯一做的就是关闭 intellij 并在夜间关闭机器。 前段时间我在调试代码时没有发现任何错误,但测试总是失败。重新启动后它工作。 也许是时候获取最新版本的 Intellij 了。

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 2020-02-07
    • 2015-05-24
    • 2019-05-18
    • 2023-04-07
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多