首先声明:网上的错误认识,在网看到有人说ObjectMapper不能转换复杂的json字符串(比如数组对象,然后对象里面又包含子对象,子对象又包含了数组对象等,,)。
经过实测,不管多么复杂的json格式,都是可以用ObjectMapper转换的。
如果不能转换说明打开的方式不对。
首先说一下研究这个问题的过程吧,今天调试Consul,查询健康节点信息,因为要把节点信息的json串转换成java对象,发现ObjectMapper不好用了(因为没有仔细研究报错)。
不是ObjectMapper的问题,是没用对。
今天就详细总结一下几个容易错的点:
第一,ObjectMapper在自动识别java类时,如果类中有一个节点是Node,但是在ObjectMapper眼中它却是node(小写的n);这样如果你的json字符串中节点是Node,此时就会匹配不上。
第二,ObjectMapper在自动识别java类时,如果类中有一个节点是ID,则在ObjectMapper眼中它是id。
第三,所以定义类的属性要规范,首字母小写,对于ID,就应该写id,而不是ID或者iD。要规范。第一点和第二点也就是我犯错的原因。
第四,如果json字符串中,key的首字母大些了,则要用replace转换成小写。比如{"Node":"n1"},要替换成{"node":"n1"}。
第五,为什么选择ObjectMapper,因为效率高。
接下来给出仔细的过程。