下面列出了com.fasterxml.jackson.databind.ser.std.ClassSerializer#com.fasterxml.jackson.databind.deser.Deserializers 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static ObjectMapper createProtobufMapper() {
ObjectMapper mapper = new ObjectMapper();
// Serialization
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// Deserialization
mapper.disable(SerializationFeature.INDENT_OUTPUT);
SimpleDeserializers simpleDeserializers = new SimpleDeserializers();
simpleDeserializers.addDeserializer(String.class, new TrimmingStringDeserializer());
List<Deserializers> deserializersList = Arrays.asList(
new AssignableFromDeserializers(Message.class, new ProtobufMessageDeserializer()),
simpleDeserializers
);
CompositeDeserializers compositeDeserializers = new CompositeDeserializers(deserializersList);
CustomDeserializerSimpleModule module = new CustomDeserializerSimpleModule(compositeDeserializers);
module.addSerializer(Message.class, new ProtobufMessageSerializer());
mapper.registerModule(module);
return mapper;
}
private ObjectMapper getObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
// Serialization
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// Deserialization
mapper.disable(SerializationFeature.INDENT_OUTPUT);
SimpleDeserializers simpleDeserializers = new SimpleDeserializers();
simpleDeserializers.addDeserializer(String.class, new TrimmingStringDeserializer());
List<Deserializers> deserializersList = Arrays.asList(
new AssignableFromDeserializers(Message.class, new ProtobufMessageDeserializer()),
simpleDeserializers
);
CompositeDeserializers compositeDeserializers = new CompositeDeserializers(deserializersList);
CustomDeserializerSimpleModule module = new CustomDeserializerSimpleModule(compositeDeserializers);
module.addSerializer(Message.class, new ProtobufMessageSerializer());
mapper.registerModule(module);
return mapper;
}
@Override
@SuppressWarnings("unchecked")
public JsonDeserializer<Object> createBeanDeserializer(DeserializationContext ctxt, JavaType type, BeanDescription beanDesc)
throws JsonMappingException
{
for (Deserializers d : _factoryConfig.deserializers()) {
JsonDeserializer<?> deser = d.findBeanDeserializer(type, ctxt.getConfig(), beanDesc);
if (deser != null) {
return (JsonDeserializer<Object>) deser;
}
}
throw new IllegalArgumentException("No explicitly configured deserializer for " + type);
}
@Test
public void deserializerByType() throws JsonMappingException {
JsonDeserializer<Date> deserializer = new DateDeserializers.DateDeserializer();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modules(new ArrayList<>()) // Disable well-known modules detection
.deserializerByType(Date.class, deserializer)
.build();
assertTrue(getDeserializerFactoryConfig(objectMapper).hasDeserializers());
Deserializers deserializers = getDeserializerFactoryConfig(objectMapper).deserializers().iterator().next();
assertSame(deserializer, deserializers.findBeanDeserializer(SimpleType.construct(Date.class), null, null));
}
@Test
public void deserializerByType() throws JsonMappingException {
JsonDeserializer<Date> deserializer = new DateDeserializers.DateDeserializer();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modules(new ArrayList<>()) // Disable well-known modules detection
.deserializerByType(Date.class, deserializer)
.build();
assertTrue(getDeserializerFactoryConfig(objectMapper).hasDeserializers());
Deserializers deserializers = getDeserializerFactoryConfig(objectMapper).deserializers().iterator().next();
assertSame(deserializer, deserializers.findBeanDeserializer(SimpleType.construct(Date.class), null, null));
}
public JsonDeserializer<?> findDeserializer(JavaType type, DeserializationConfig config,
BeanDescription beanDesc)
throws JsonMappingException
{
final Class<?> rawType = type.getRawClass();
if (_jdk7Helper != null) {
JsonDeserializer<?> deser = _jdk7Helper.getDeserializerForJavaNioFilePath(rawType);
if (deser != null) {
return deser;
}
}
if ((CLASS_DOM_NODE != null) && CLASS_DOM_NODE.isAssignableFrom(rawType)) {
return (JsonDeserializer<?>) instantiate(DESERIALIZER_FOR_DOM_NODE);
}
if ((CLASS_DOM_DOCUMENT != null) && CLASS_DOM_DOCUMENT.isAssignableFrom(rawType)) {
return (JsonDeserializer<?>) instantiate(DESERIALIZER_FOR_DOM_DOCUMENT);
}
String className = rawType.getName();
String factoryName;
if (className.startsWith(PACKAGE_PREFIX_JAVAX_XML)
|| hasSuperClassStartingWith(rawType, PACKAGE_PREFIX_JAVAX_XML)) {
factoryName = DESERIALIZERS_FOR_JAVAX_XML;
} else {
return null;
}
Object ob = instantiate(factoryName);
if (ob == null) { // could warn, if we had logging system (j.u.l?)
return null;
}
return ((Deserializers) ob).findBeanDeserializer(type, config, beanDesc);
}
@Override
public JsonDeserializer<?> findEnumDeserializer(Class<?> type, DeserializationConfig config, BeanDescription beanDesc)
throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findEnumDeserializer(type, config, beanDesc);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findTreeNodeDeserializer(Class<? extends JsonNode> nodeType, DeserializationConfig config,
BeanDescription beanDesc) throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findTreeNodeDeserializer(nodeType, config, beanDesc);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findReferenceDeserializer(ReferenceType refType, DeserializationConfig config,
BeanDescription beanDesc, TypeDeserializer contentTypeDeserializer,
JsonDeserializer<?> contentDeserializer) throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findReferenceDeserializer(refType, config, beanDesc, contentTypeDeserializer, contentDeserializer);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findBeanDeserializer(JavaType type, DeserializationConfig config, BeanDescription beanDesc)
throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findBeanDeserializer(type, config, beanDesc);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findArrayDeserializer(ArrayType type, DeserializationConfig config, BeanDescription beanDesc,
TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findArrayDeserializer(type, config, beanDesc, elementTypeDeserializer, elementDeserializer);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findCollectionDeserializer(CollectionType type, DeserializationConfig config, BeanDescription beanDesc,
TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findCollectionDeserializer(type, config, beanDesc, elementTypeDeserializer, elementDeserializer);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findCollectionLikeDeserializer(CollectionLikeType type, DeserializationConfig config,
BeanDescription beanDesc, TypeDeserializer elementTypeDeserializer,
JsonDeserializer<?> elementDeserializer) throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findCollectionLikeDeserializer(type, config, beanDesc, elementTypeDeserializer, elementDeserializer);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findMapDeserializer(MapType type, DeserializationConfig config, BeanDescription beanDesc,
KeyDeserializer keyDeserializer, TypeDeserializer elementTypeDeserializer,
JsonDeserializer<?> elementDeserializer) throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findMapDeserializer(type, config, beanDesc, keyDeserializer, elementTypeDeserializer, elementDeserializer);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Override
public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type, DeserializationConfig config, BeanDescription beanDesc,
KeyDeserializer keyDeserializer, TypeDeserializer elementTypeDeserializer,
JsonDeserializer<?> elementDeserializer) throws JsonMappingException {
for (Deserializers deserializers : deserializersList) {
JsonDeserializer<?> deserializer = deserializers.findMapLikeDeserializer(type, config, beanDesc, keyDeserializer, elementTypeDeserializer, elementDeserializer);
if (deserializer != null) {
return deserializer;
}
}
return null;
}
@Test
public void deserializerByType() throws JsonMappingException {
JsonDeserializer<Date> deserializer = new DateDeserializers.DateDeserializer();
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modules(new ArrayList<>()) // Disable well-known modules detection
.deserializerByType(Date.class, deserializer).build();
assertTrue(getDeserializerFactoryConfig(objectMapper).hasDeserializers());
Deserializers deserializers = getDeserializerFactoryConfig(objectMapper).deserializers().iterator().next();
assertSame(deserializer, deserializers.findBeanDeserializer(SimpleType.construct(Date.class), null, null));
}
public CompositeDeserializers(List<Deserializers> deserializers) {
this.deserializersList = deserializers;
}
public CustomDeserializerSimpleModule(Deserializers deserializers) {
this.deserializers = deserializers;
}
/**
* Method that module can use to register additional deserializers to use for
* handling types.
*
* @param d Object that can be called to find deserializer for types supported
* by module (null returned for non-supported types)
*/
public void addDeserializers(Deserializers d);