2017-03-16 11 views
0

我想了解系统反序列化JSON数据时的处理顺序。当反序列化JSON是刚设置的参数?

参数是否刚刚创建POJO? 还是通过调用各种setSomeArg(String someValu)方法来设置参数?

我没有通过搜索或Google找到我的答案。 欣赏这一点。如果这与已经在SO中的帖子重复,请发布链接,而不是仅仅说它是重复的。谢谢。

回答

0

反序列化过程使用自省/反射,这意味着它将检查与JSON中发现的属性相同的属性,然后根据您的类属性类型设置该值(即将值转换为整数如果它是一个整数)。

该过程是递归的,所以如果您的POJO具有其他POJO属性,它将尝试解析JSON的值作为对象,直到设置每个属性。 我不知道你正在使用的库,但Genson,例如,需要一个构造函数不带属性,为了看起来像

POJO myPojo = POJO.class.newInstance(); 

然后,它会的方式来调用它通过内省/反射设置在某种程度上就像每个属性:

long value = Long.ParseLong(myJson.get('value')); 
// The example field is a long int 
Field f = POJO.getClass().getDeclaredField("aFieldName"); 
f.setLong(myPojo, value); 

如果你想有一个更完整的例子,看看javadoc的:https://docs.oracle.com/javase/tutorial/reflect/member/fieldValues.html

+0

我使用的FasterXML.Jackson库。我的确了解了上述情况,这只是我对此感兴趣的价值的实际设定。它是通过将属性设置为JSON中的值来设置的属性,还是利用POJO中为该属性定义的setSomeMethod()? – Elijah

+0

我刚刚编辑回答匹配您的评论。我认为,“setLong(objectConcerned,value)”是你正在寻找的方法。 – yanneke

+0

就这样我们在同一页面上,你说当JSON被反序列化到pojo中时,pojo属性是通过setSomeArg(String someValu)方法设置的,并且情况总是如此,对吗? – Elijah