Как использовать Jackson ObjectMapper для разбора json-ответа на java-объекты

Вот мой ответ Json

"postedevent": [
    {
        "status": "true",
        "event_id": "800",
        "num_of_image_event": "0",
        "title": "Testy",
        "photo": "http://54.200.110.49/checkplanner/img/upload/21310059819profile_image_1409303464798.png",
        "event_date": "2014-08-29",
        "fullDate": "Friday - August 29, 2014",
        "event_from": "12:00AM",
        "event_to": "12:15AM",
        "city": "Ahm",
        "state": "CA",
        "member_id": "471",
        "username": "Krishna Mohan",
        "pencil": "yes",
        "attend": "yes",
        "company": "Development"
    }
 ]

это класс java для получения объектов java из ответа json

public class PostedEvent {

String status;
int event_id;
int num_of_image_event;
String title;
String photo;
String event_date;
String fullDate;
String event_from;
String event_to;
String city;
String state;
String member_id;
String username;
String pencil;
String attend;
String company;


}


public class PostedEvnetsList 
{
     ArrayList<PostedEvent> postedevent;
}

И я разбираю таким образом

InputStream is = WebResponse.getResponse(url);
ObjectMapper mapper = new ObjectMapper();
PostedEvnetsList mList = null;
mList = mapper.readValue(is,PostedEvnetsList.class);
eventList = mList.postedevent;

Я получаю следующее исключение разбора

jackson.map.exc.UnrecognizedPropertyException: нераспознанное поле «статус» (класс com.example.jsonproforexam.PostedEvent), не помеченное как игнорируемое

Я объявил те же поля, что и в ответе json, тогда почему я получаю это исключение. Пожалуйста, помогите


person HemangNirmal    schedule 28.08.2014    source источник
comment
вам нужно реализовать геттеры и сеттеры   -  person zozelfelfo    schedule 28.08.2014


Ответы (2)


Вы можете использовать аннотацию JsonProperty, чтобы указать ключ json.

Ex:

public class PostedEvent {

    @JsonProperty("status")
    String status;

    @JsonProperty("event_id")
    String eventId;

....
....

Если вы пропустили некоторые поля из json в своем классе сущностей, вы можете использовать аннотацию @JsonIgnoreProperties, чтобы игнорировать неизвестные поля.

@JsonIgnoreProperties(ignoreUnknown = true)
public class PostedEvent {

...
person Abhishek V    schedule 28.08.2014
comment
спасибо, я следую вашему предложению и выяснил, что если мы сделаем непубличные поля игнорируемыми, тогда Джексон сможет получить доступ к этим полям, взяв ссылку из json - person HemangNirmal; 28.08.2014

Ваши поля PostedEvent и PostedEvent поля PostedEventsList недоступны.

Вы должны установить их как public (не рекомендуется) или предоставить общедоступные геттеры и сеттеры для них в стиле POJO.

Тогда Джексон сможет десериализоваться, и ошибка исчезнет.

person Mena    schedule 28.08.2014
comment
Большое спасибо, вы решили мою ошибку и сэкономили мое время и усилия, и мне нужна еще одна помощь. Не могли бы вы объяснить мне, почему Джексон не может получить доступ к полям, кроме общедоступных, и какова стратегия десериализации Джексона? - person HemangNirmal; 28.08.2014
comment
@HemangNirmal всегда пожалуйста. Джексон может получить доступ к непубличным полям, если вы предоставляете общедоступные методы доступа (т.е. геттеры/сеттеры), что является рекомендуемым способом (инкапсуляция дефайлов общедоступных полей). Вы можете найти дополнительную информацию и документацию на их домашней странице. - person Mena; 28.08.2014