HashMap中的杰克逊ObjectMapper解析返回所有字段= NULL
我试图使用到的HashMap数据解析成POJOHashMap中的杰克逊ObjectMapper解析返回所有字段= NULL
Object parsedMessage = objectMapper.convertValue(receivedMessage, destinationClass);
其中receivedMessage是一个HashMap(从JSON更早解析)和各种类型的包含字段 - 整数,布尔,字符串,LinkedHashMap。
我已经定义destinationClass,以便它包含在HashMap的键发现场的一些,具有完全相同的名称作为关键字(区分大小写)。
该指令无例外地执行,但parsedMessage中的所有字段都是null。可能是什么原因?类似的指令在其他代码中工作得很好。
我已经解决了。
事实证明,不管如何destinationClass你的Java领域命名,杰克逊(至少,在默认情况下),假设它在lowerCamelCase命名。 因此,如果你的散列表有“YourField”,并且你的POJO具有相同的“YourField”,那么它将不起作用如果你从头两端不使用lowerCamelCase! (如果解析序列化的.NET JSON,则最终会得到UpperCamelCase)。
因为杰克逊假设您的POJO的“YourField”被命名为“yourField”进行匹配!
为了解决这个问题,或者:
你的HashMap的密钥必须lowerCamelCase。
OR
与创建映射器不区分大小写的行为
ObjectMapper om = new ObjectMapper();
om.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
return om;
OR
为清楚起见,你可以在POJO(https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations)
@JsonProperty("YourField")
private String YourField;
注意使用annottaions:如果您想做某种“宽容读者”(http://martinfowler.com/bliki/TolerantReader.html),你可能会发现基于类的注释@JsonIgnoreProperties(ignoreUnknown = true) ,所以如果你试图解析没有描述的字段,你将不会得到异常。
你的代码和POJO类是什么? – Jerry06
HashMap中的简单“Id:1”键值对不会被转换为Integer Id = 1作为对象字段@ Jerry06 –
我看到它与jackson 2.4 – Jerry06