Jackson ObjectMapper – 未映射“_”的属性

我在以下情况下使用ObjectMapper,但是,Person类的JSON属性为“last_name”,当“name”属性映射正确时,它似乎没有被映射。 我在下面列出了我的Person类。 任何可能发生这种情况的原因都值得赞赏。 jackson核心/映射器1.8.5正在使用。

ObjectNode node = (ObjectNode) row.getDocAsNode(); try { Person person = mapper.readValue(node, Person.class); tt.setText(person.getName()); bt.setText(person.getLastName()); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

人员类:

 @JsonIgnoreProperties(ignoreUnknown = true) public class Person { private String _name; private String _last_name; public String getName() { return _name; } public String getLastName() { return _last_name; } public void setName(String str) { _name = str; } public void setLastName(String str) { _last_name = str; } } 

Java Bean规范定义了预期映射的内容; 所以有方法getLastName()意味着只会映射精确属性“lastName”。

要映射“last_name”,您有两个选项:

  • 在get方法旁边使用@JsonProperty("last_name")来重命名所使用的JSON属性
  • 使用PropertyNamingStrategy (如PropertyNamingStrategy. LowerCaseWithUnderscoresStrategy ),注册“ObjectMapper.setNamingStrategy()”来改变Bean属性映射JSON名称的方式

如果所有数据都使用与Java Bean命名约定不同的命名约定(camel case),则后一种方法是有意义的。 前者更适合一次性变更。