2012-03-14 55 views
1

我在以下情况下使用ObjectMapper,但是,Person类有一个JSON属性“last_name”,它似乎并没有在“名称”属性映射正常。下面列出了我的Person类。任何可能发生这种情况的原因都会受到赞赏。杰克逊核心/映射器1.8.5被使用。杰克逊ObjectMapper - 具有“_”的属性未映射

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(); 
    } 

Person类:

@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; } 

} 

回答

6

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

要映射 “姓氏”,你有两个选择:

  • 使用@JsonProperty("last_name")下一个获得方法重命名JSON属性使用
  • 使用PropertyNamingStrategy(如PropertyNamingStrategy. LowerCaseWithUnderscoresStrategy),以“ObjectMapper.setNamingStrategy注册()”,即可更改Bean的属性映射JSON的名字,如果你所有的数据来自使用命名约定从Java Bean的不同命名约定

后一种方法是有道理的(骆驼案件)。前者更适合一次性更改。

+0

非常感谢,这是点睛之笔。 – Alex 2012-03-19 21:05:21

+0

欢迎您 - 感谢您确认此作品! – StaxMan 2012-03-20 17:36:20