2012-03-14 80 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