2012-03-14 3 views
1

Я использую ObjectMapper в следующей ситуации, однако класс Person имеет свойство JSON «last_name», которое, похоже, не отображается, когда «имя», свойство отображается точно. Я включил свой класс Person ниже. Любые причины, почему это может произойти, оцениваются. Используется Jackson core/mapper 1.8.5.Jackson 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».

Чтобы отобразить "last_name", у вас есть несколько вариантов:

  • использование @JsonProperty("last_name") рядом, чтобы получить метод, чтобы переименовать JSON свойство использовали
  • использовать PropertyNamingStrategy (как PropertyNamingStrategy. LowerCaseWithUnderscoresStrategy), зарегистрирован «ObjectMapper.setNamingStrategy() ", чтобы изменить способ отображения свойств бина JSON-имена

Метод Latter имеет смысл, если все ваши данные поступают с использованием соглашения об именах, отличного от соглашения об именах Java Bean (верблюд дело). Бывший лучше для одноразовых изменений.

+0

Большое спасибо, это было на месте. – Alex

+0

Добро пожаловать - спасибо за подтверждение этого! – StaxMan