使用 jackson 将单例 json 数组反序列化为相同类型的 pojo?



是否有任何开箱即用的方法可以将单例 json 数组反序列化为相同类型的 java pojo?

例如,我想要以下 json:

[{"eventId": "event1", "timestamp": 1232432132}]

要反序列化为以下 Java POJO:

class Event {
String eventId;
long timestamp;
}

我尝试使用以下类:

class Event {
String eventId;
long timestamp;
public Event(@JsonProperty("eventId") String event, 
@JsonProperty("timestamp") long timestamp)
//fields init
}
@JsonCreator
public Event(List<Event> singletonList)
//take first element in list and set its fields on this
} 

但这失败了:om.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.ArrayList out of FIELD_NAME token

我知道我可以用其他类包装事件 POJO,如下所示:

class EventWrapper {
Event event;
@JsonCreator   
EventWrapper(List<Event> events) {
this.event = events.get(0);
}  

但我想避免这种情况(以及避免自定义反序列化程序(

任何帮助将不胜感激。

你可以按照这个来获取List,而不是创建额外的类,

import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
List<Event> myObjects = Arrays.asList(mapper.readValue(json, Event[].class));

最新更新