假设我有一个这样的Json对象:
{ "name": "Bob Dole", "company": "Bob Dole Industries", "phone": { "work": "123-456-7890", "home": "234-567-8901", "mobile": "345-678-9012" } }
为了帮助我阅读它,我将Jackson的Object Mapper与以下类一起使用:
public class Contact { public static class Phone { private String work; private String home; private String mobile; public String getWork() { return work; } public String getHome() { return home; } public String getMobile() { return mobile; } public void setWork(String s) { work = s; } public void setHome(String s) { home = s; } public void setMobile(String s) { mobile = s; } } private String name; private String company; private Phone phone; public String getName() { return name; } public String getCompany() { return company; } public Phone getPhone() { return phone; } public void setName(String s) { name = s; } public void setCompany(String s) { company = s; } public void setPhone(Phone p) { phone = p; } }
我的问题是,(使用最简单的解释)对象映射器如何“反序列化” Json对象?我以为它与变量名匹配,但是将它们更改几个字母不会影响输出。然后,我尝试切换set()函数的顺序,但没有做任何事情。我也尝试过两者,但这也没用。我猜这里还有一些更复杂的东西,但是呢?
我试图查看文档和过去的代码,但没有看到对我有意义的解释。
没有任何注释,它执行所谓的POJO映射,它仅在实例成员上使用反射,并使用一些有关如何将json中的键映射到实例成员的名称的规则。* 注:它适用于private成员以及public或package protected以及
POJO
private
public
package protected
如果与实例成员的名称不匹配,则开始尝试与getXXX和setXXX方法匹配,如果与任何方法都不匹配,则放弃。
getXXX
setXXX
它使用批注提供的元数据进行映射和转换。
当您有添加注释的源时,最好总是显式地使用注释,这样就不会猜测将什么映射到什么。
记住显式总是比隐式好!
映射和注释
我现在正在为我所有的新项目创建JSON Schema定义,以根据架构规则引擎记录什么是有效的JSON以及什么是无效的JSON。这是记录数据结构并消除解析错误的好方法。