java - Jackson ObjectMapper解析HashMap返回所有字段= NULL

标签 java json jackson objectmapper

我正在尝试使用

将 HashMap 数据解析为 POJO
Object parsedMessage = objectMapper.convertValue(receivedMessage, destinationClass);

其中 receiveMessage 是一个 HashMap(之前从 JSON 解析)并包含各种类型的字段 - 整数、 boolean 值、字符串、LinkedHashMap。

我已经定义了destinationClass,以便它包含一些在HashMap键中找到的字段,并且恰好与键相同的名称(区分大小写)。

指令执行时没有异常,但 parsedMessage 中的所有字段均为null。可能是什么原因?类似的指令在代码的其他位置工作得很好。

最佳答案

我已经解决了。

事实证明,无论 destinationClass 中的 Java 字段如何命名,Jackson(至少默认情况下)都假定它以小驼峰命名。 因此,如果您的 HashMap 具有“YourField”并且您的 POJO 具有相同的“YourField”,那么如果您不从两端开始都使用小驼峰命名法,那么它将无法工作! (如果您解析序列化的 .NET JSON,您最终会得到 UpperCamelCase)。

因为Jackson假设你的POJO的“YourField”被命名为“yourField”用于匹配!

要解决此问题,可以:

您的 HashMap 键必须采用小驼峰命名法。

或者

创建具有不区分大小写行为的映射器

ObjectMapper om = new ObjectMapper();
om.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
return om;

或者

为了清楚起见,您可以在 POJO 中使用注释 ( https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations )

   @JsonProperty("YourField")
   private String YourField;

注意:如果您想通过部分解析进行某种“容忍阅读器”( http://martinfowler.com/bliki/TolerantReader.html ),您可能会发现基于类的注释 @JsonIgnoreProperties(ignoreUnknown = true) 因此,如果您尝试解析未描述的字段,则不会出现异常。

关于java - Jackson ObjectMapper解析HashMap返回所有字段= NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40649030/

相关文章:

java - 是否可以对 ORMLite 和 Jackson JSON 使用一个类?

java - 使用 Jackson 将数组从 javascript 传递到 java servlet

Java - 需要帮助来构造正则表达式模式

java - 在监听器中使用 ParserRuleContext 遍历 token - ANTLR4

python - Json序列化问题

Android HttpUrlConnection Url 在模拟器上不起作用

java - 为拥有的实体解耦服务的设计模式是什么?

java - 确保 Java 中的 UML 约束?

php - 如何在数据库中存储作为 POST 传递的多个参数

java - jackson 数据绑定(bind)