下面列出了怎么用com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Constructs and initializes a JsonService with an {@link ObjectService}.
*
* @param objectService
*/
public DefaultJsonService(final ObjectService objectService) {
idToObjDeserializer = new UntypedObjectDeserializer(null, null) {
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException
{
final Object obj = super.deserialize(p, ctxt);
if (!(obj instanceof String && ((String) obj).startsWith("object:")))
return obj;
final String id = (String) obj;
if (!objectService.contains(id)) {
throw new JsonMappingException(p, "Object does not exist");
}
final ObjectInfo info = objectService.find(id);
info.updateLastUsed();
return info.getObject();
}
};
final JsonSerializer<Object> objToIdSerializer =
new JsonSerializer<Object>()
{
@Override
public void serialize(Object value, JsonGenerator gen,
SerializerProvider serializers) throws IOException,
JsonProcessingException
{
gen.writeString(objectService.register(value, "DefaultJsonService"));
}
};
final SimpleModule objToIdModule = new SimpleModule();
objToIdModule.setSerializerModifier(new BeanSerializerModifier() {
@Override
public JsonSerializer<?> modifySerializer(SerializationConfig config,
BeanDescription beanDesc, JsonSerializer<?> serializer)
{
if (Mixins.support(beanDesc.getBeanClass())) return serializer;
// If the serialized class is unknown (i.e. serialized using the general
// BeanSerializer) or should not be serialized (i.e. complicated class
// implemented interfaces such as Iterable), would be serialized as an
// ID.
if (serializer instanceof BeanSerializer) return objToIdSerializer;
if (notSerialized(beanDesc.getBeanClass())) return objToIdSerializer;
return serializer;
}
});
objToIdMapper = new ObjectMapper();
objToIdMapper.registerModule(objToIdModule);
// register Jackson MixIns to obtain better json output format for some
// specific types
Mixins.registerMixIns(objToIdMapper);
}