下面列出了com.fasterxml.jackson.databind.ObjectMapper#treeAsTokens ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
void deserialize() throws IOException {
final ObjectMapper objectMapper = new ObjectMapper();
final InstantDeserializer deserializer = new InstantDeserializer();
final JsonParser parser = objectMapper.treeAsTokens(objectMapper.readTree("\"2016-08-11T11:28:34.085Z\""));
parser.nextToken();
final Instant instant = deserializer.deserialize(parser, objectMapper.getDeserializationContext());
assertEquals(Instant.from(
ZonedDateTime.of(
LocalDate.of(2016, 8, 11),
LocalTime.of(11, 28, 34, (int) TimeUnit.MILLISECONDS.toNanos(85)),
ZoneOffset.UTC
)
), instant);
}
private BiFunction<JsonNode, Type, Object> makeDeserialiser(ObjectMapper mapper) {
final TypeFactory typeFactory = mapper.getTypeFactory();
return (node, type) -> {
JavaType javaType = typeFactory.constructType(type);
try {
final JsonParser jsonParser = mapper.treeAsTokens(node);
final ObjectCodec codec = jsonParser.getCodec();
return codec.readValue(jsonParser, javaType);
} catch (IOException e) {
throw new RuntimeException(e);
}
};
}
private BiFunction<JsonNode, Type, Object> makeDeserialiser(ObjectMapper mapper) {
final TypeFactory typeFactory = mapper.getTypeFactory();
return (node, type) -> {
JavaType javaType = typeFactory.constructType(type);
try {
final JsonParser jsonParser = mapper.treeAsTokens(node);
final ObjectCodec codec = jsonParser.getCodec();
return codec.readValue(jsonParser, javaType);
} catch (IOException e) {
throw new RuntimeException(e);
}
};
}
@SuppressWarnings("unchecked")
public static <T extends MessageOrBuilder> List<T> writeAndReadBack(ObjectMapper mapper, List<T> values) {
if (values.isEmpty()) {
return Collections.emptyList();
}
Class<T> messageType = (Class<T>) values.get(0).getClass();
JsonParser parser = mapper.treeAsTokens(toTree(mapper, values));
try {
return Lists.newArrayList(mapper.readValues(parser, messageType));
} catch (IOException e) {
throw new RuntimeException(e);
}
}