2011-01-26 3 views
3

Я пытаюсь использовать Джексона в проекте Android через ObjectMapper.Использование Джексона для десериализации объектов JSON для POJO

Мой POJO выглядит следующим образом:

public class Product { 
    @JsonProperty("title") 
    String title; 
    @JsonProperty("vendor") 
    String vendor; 

    public void setTitle(String title){ this.title = title; } 
    public void setVendor(String vendor){ this.vendor = vendor; } 

    public String getTitle() { return title; } 
    public String getVendor() { return vendor; } 
} 

Я написал до юнит-тестов, чтобы увидеть, если я мог бы получить Джексон работает десериализации мои объекты JSON.

Context ctx; 

public void setUp() throws Exception { 
    super.setUp(); 
    ctx = getContext(); 
} 

public void testConvertJSONToProduct() throws Exception { 
    ObjectMapper m = new ObjectMapper(); 
    Product product = m.readValue(ctx.getAssets().open("foo.json"), Product.class); 

    assertEquals("Macbook", product.getTitle()); 
} 

Мой фактический файл JSON содержит гораздо больше информации, чем то, что я установил в своем продукте, но я просто хочу, чтобы заставить его работать. Использование большего файла приводит к созданию продукта, но все его значения равны нулю. Я думал, что это может быть из-за все данные, которые там, так что я создал еще один файл (foo.json), который содержит следующее:

{"title" : "Macbook", "vendor" : "Apple"} 

С, который я также получаю такую ​​же проблему.

+0

Какую версию Джексона вы используете? @JsonProperty разрешен только как аннотация поля после версии 1.0. –

+0

jackson- (core/mapper) -asl-1.6.4 – csaunders

ответ

1

Обратите внимание, что вам не нужны эти аннотации @JsonProperty, так как у вас есть геттеры и сеттеры, которые подразумевают «заголовок» (согласно соглашению об именах бит). В любом случае, код должен работать так, как вы показали.

Возможно, я сначала проверил, что ctxt.getAssets(). Open() не возвращает пустой контент? Это единственное, что выделяется.

+0

Я понял, что делаю некоторые ошибки, в ходе которых я работал, что было основной причиной путаницы. Я собираюсь отметить ваш комментарий как правильный, потому что он разъясняет правильное использование аннотаций Джексона. – csaunders