【发布时间】: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 和机器后工作。对此感到抱歉,非常感谢您的努力!