List of usage examples for com.fasterxml.jackson.databind JsonDeserializer JsonDeserializer
JsonDeserializer
From source file:io.gravitee.management.rest.mapper.ObjectMapperResolver.java
public ObjectMapperResolver() { mapper = new GraviteeMapper(); SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new BeanDeserializerModifier() { @Override/* www . jav a2s. c om*/ public JsonDeserializer<Enum> modifyEnumDeserializer(DeserializationConfig config, final JavaType type, BeanDescription beanDesc, final JsonDeserializer<?> deserializer) { return new JsonDeserializer<Enum>() { @Override public Enum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass(); return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase()); } }; } }); module.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) { @Override public void serialize(Enum value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeString(value.name().toLowerCase()); } }); mapper.registerModule(module); }
From source file:com.cloudmine.api.persistance.CMJacksonModule.java
public CMJacksonModule() { super("CustomModule", new Version(1, 0, 0, null)); addSerializer(new JsonSerializer<Date>() { @Override/*from ww w . j av a 2s . c o m*/ public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeRaw(JsonUtilities.convertDateToUnwrappedJsonClass(value)); jgen.writeEndObject(); } @Override public Class<Date> handledType() { return Date.class; } }); addDeserializer(Date.class, new JsonDeserializer<Date>() { @Override public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { ObjectMapper mapper = (ObjectMapper) jp.getCodec(); ObjectNode root = (ObjectNode) mapper.readTree(jp); JsonNode classNode = root.get(JsonUtilities.CLASS_KEY); boolean isDate = classNode != null && JsonUtilities.DATE_CLASS.equals(classNode.asText()); if (isDate) { JsonNode timeNode = root.get(JsonUtilities.TIME_KEY); if (timeNode != null) { Long seconds = timeNode.asLong(); Date date = new Date(seconds * 1000); return date; } } return null; } }); addSerializer(new JsonSerializer<SimpleCMObject>() { @Override public void serialize(SimpleCMObject value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStartObject(); String json = null; try { json = value.asUnkeyedObject(); } catch (ConversionException e) { LOG.error("Error while serializing, sending empty json", e); json = JsonUtilities.EMPTY_JSON; } jgen.writeRaw(JsonUtilities.unwrap(json)); jgen.writeEndObject(); } @Override public Class<SimpleCMObject> handledType() { return SimpleCMObject.class; } }); addSerializer(jsonSerializerForType(CMFile.class)); addSerializer(jsonSerializerForType(CMSessionToken.class)); addSerializer(jsonSerializerForType(CMType.class)); addSerializer(jsonSerializerForType(TransportableString.class)); addSerializer(jsonSerializerForType(ResponseBase.class)); }
From source file:com.netflix.suro.jackson.DefaultObjectMapper.java
@Inject public DefaultObjectMapper(final Injector injector, Set<TypeHolder> crossInjectable) { SimpleModule serializerModule = new SimpleModule("SuroServer default serializers"); serializerModule.addSerializer(ByteOrder.class, ToStringSerializer.instance); serializerModule.addDeserializer(ByteOrder.class, new JsonDeserializer<ByteOrder>() { @Override/*from w w w . ja va2 s . c om*/ public ByteOrder deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { if (ByteOrder.BIG_ENDIAN.toString().equals(jp.getText())) { return ByteOrder.BIG_ENDIAN; } return ByteOrder.LITTLE_ENDIAN; } }); registerModule(serializerModule); registerModule(new GuavaModule()); if (injector != null) { setInjectableValues(new InjectableValues() { @Override public Object findInjectableValue(Object valueId, DeserializationContext ctxt, BeanProperty forProperty, Object beanInstance) { LOG.info("Looking for " + valueId); try { return injector.getInstance( Key.get(forProperty.getType().getRawClass(), Names.named((String) valueId))); } catch (Exception e) { try { return injector.getInstance(forProperty.getType().getRawClass()); } catch (Exception ex) { LOG.info("No implementation found, returning null"); } return null; } } }); } configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); configure(MapperFeature.AUTO_DETECT_GETTERS, false); configure(MapperFeature.AUTO_DETECT_CREATORS, false); configure(MapperFeature.AUTO_DETECT_FIELDS, false); configure(MapperFeature.AUTO_DETECT_IS_GETTERS, false); configure(MapperFeature.AUTO_DETECT_SETTERS, false); configure(SerializationFeature.INDENT_OUTPUT, false); if (crossInjectable != null) { for (TypeHolder entry : crossInjectable) { LOG.info("Registering subtype : " + entry.getName() + " -> " + entry.getRawType().getCanonicalName()); registerSubtypes(new NamedType(entry.getRawType(), entry.getName())); } } }
From source file:org.rapidoid.db.impl.inmem.JacksonEntitySerializer.java
@SuppressWarnings("rawtypes") private void initDbMapper() { SimpleModule dbModule = new SimpleModule("DbModule", new Version(1, 0, 0, null, null, null)); dbModule.addDeserializer(DbList.class, new JsonDeserializer<DbList>() { @SuppressWarnings("unchecked") @Override/*from www . j a va2 s. co m*/ public DbList deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { Map<String, Object> data = jp.readValueAs(Map.class); String relation = (String) data.get("relation"); List<? extends Number> ids = (List<Number>) data.get("ids"); return new InMemDbList(db, null, relation, ids); } }); dbModule.addDeserializer(DbSet.class, new JsonDeserializer<DbSet>() { @SuppressWarnings("unchecked") @Override public DbSet deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { Map<String, Object> data = jp.readValueAs(Map.class); String relation = (String) data.get("relation"); List<? extends Number> ids = (List<Number>) data.get("ids"); return new InMemDbSet(db, null, relation, ids); } }); dbModule.addDeserializer(DbRef.class, new JsonDeserializer<DbRef>() { @SuppressWarnings("unchecked") @Override public DbRef deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { Map<String, Object> data = jp.readValueAs(Map.class); String relation = (String) data.get("relation"); List<? extends Number> ids = (List<Number>) data.get("ids"); U.must(ids.size() <= 1, "Expected 0 or 1 IDs!"); long id = !ids.isEmpty() ? ids.get(0).longValue() : -1; return new InMemDbRef(db, null, relation, id); } }); mapper.registerModule(dbModule); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); }
From source file:org.ng200.openolympus.DurationJacksonModule.java
public DurationJacksonModule() { addSerializer(new JsonSerializer<Duration>() { @Override//from ww w.j a v a 2 s .c o m public void serialize(Duration duration, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { gen.writeNumber(duration.toMillis()); } @Override public Class<Duration> handledType() { return Duration.class; } }); addDeserializer(Duration.class, new JsonDeserializer<Duration>() { @Override public Duration deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { long l = jp.getValueAsLong(); return Duration.ofMillis(l); } @Override public Class<Duration> handledType() { return Duration.class; } }); }
From source file:nebula.plugin.metrics.dispatcher.AbstractMetricsDispatcher.java
/** * Register Jackson module that maps enums as lowercase. Per http://stackoverflow.com/a/24173645. *//*from www. ja v a 2 s .co m*/ @SuppressWarnings("rawtypes") private static void registerEnumModule(ObjectMapper mapper) { SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new BeanDeserializerModifier() { @Override public JsonDeserializer<Enum> modifyEnumDeserializer(DeserializationConfig config, final JavaType type, BeanDescription beanDesc, final JsonDeserializer<?> deserializer) { return new JsonDeserializer<Enum>() { @Override public Enum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { @SuppressWarnings("unchecked") Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass(); return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase()); } }; } }); module.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) { @Override public void serialize(Enum value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeString(value.name().toLowerCase()); } }); mapper.registerModule(module); }
From source file:org.mongojack.TestCustomObjectMapper.java
private ObjectMapper createObjectMapper() { SimpleModule module = new SimpleModule("MySimpleModule", new Version(1, 0, 0, null, "", "")); module.addDeserializer(Custom.class, new JsonDeserializer<Custom>() { @Override/*from w w w . j av a 2s . co m*/ public Custom deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JsonNode node = jp.readValueAsTree(); return new Custom(node.get("v1").asText(), node.get("v2").asText()); } }); module.addSerializer(Custom.class, new JsonSerializer<Custom>() { @Override public void serialize(Custom value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStartObject(); jgen.writeFieldName("v1"); jgen.writeString(value.value1); jgen.writeFieldName("v2"); jgen.writeString(value.value2); jgen.writeEndObject(); } }); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(module); MongoJackModule.configure(objectMapper); return objectMapper; }
From source file:com.google.api.server.spi.config.annotationreader.ApiAnnotationIntrospector.java
private static <TFrom, TTo> JsonDeserializer<TFrom> getJsonDeserializer( @Nullable final Transformer<TFrom, TTo> serializer) { if (serializer == null) { return null; }/*from ww w. j a va 2 s . c o m*/ final TypeReference<TTo> serializedType = typeReferenceOf(serializer); if (serializer instanceof ResourceTransformer) { @SuppressWarnings("unchecked") final ResourceTransformer<TFrom> resourceSerializer = (ResourceTransformer<TFrom>) serializer; return new ResourceDeserializer<>(resourceSerializer); } else { return new JsonDeserializer<TFrom>() { @Override public TFrom deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { TTo deserialized = jp.readValueAs(serializedType); return serializer.transformFrom(deserialized); } }; } }
From source file:org.emfjson.jackson.tests.custom.CustomDeserializersTest.java
@Test public void testDeserializeReferenceAsStrings() throws JsonProcessingException { EMFModule module = new EMFModule(); module.configure(EMFModule.Feature.OPTION_USE_ID, true); module.configure(EMFModule.Feature.OPTION_SERIALIZE_TYPE, false); module.setReferenceDeserializer(new JsonDeserializer<ReferenceEntry>() { @Override// ww w . j a va 2s . c o m public ReferenceEntry deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { final EObject parent = EMFContext.getParent(ctxt); final EReference reference = EMFContext.getReference(ctxt); if (p.getCurrentToken() == JsonToken.FIELD_NAME) { p.nextToken(); } return new ReferenceEntry.Base(parent, reference, p.getText()); } }); mapper.registerModule(module); JsonNode data = mapper.createArrayNode() .add(mapper.createObjectNode().put("@id", "1").put("name", "Paul").put("uniqueFriend", "2")) .add(mapper.createObjectNode().put("@id", "2").put("name", "Franck")); Resource resource = mapper.reader().withAttribute(RESOURCE_SET, resourceSet) .withAttribute(ROOT_ELEMENT, ModelPackage.Literals.USER).treeToValue(data, Resource.class); assertEquals(2, resource.getContents().size()); User u1 = (User) resource.getContents().get(0); User u2 = (User) resource.getContents().get(1); assertSame(u2, u1.getUniqueFriend()); }
From source file:io.coala.json.DynaBean.java
/** * @param referenceType//from w w w . j av a 2 s. c om * @param <S> * @param <T> * @return */ static final <S, T> JsonDeserializer<T> createJsonDeserializer(final ObjectMapper om, final Class<T> resultType, final Properties... imports) { return new JsonDeserializer<T>() { @Override public T deserializeWithType(final JsonParser jp, final DeserializationContext ctxt, final TypeDeserializer typeDeserializer) throws IOException, JsonProcessingException { return deserialize(jp, ctxt); } @Override public T deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException { if (jp.getCurrentToken() == JsonToken.VALUE_NULL) return null; // if( Wrapper.class.isAssignableFrom( resultType ) ) // { // // FIXME // LOG.trace( "deser wrapper intf of {}", jp.getText() ); // return (T) Wrapper.Util.valueOf( jp.getText(), // resultType.asSubclass( Wrapper.class ) ); // } if (Config.class.isAssignableFrom(resultType)) { final Map<String, Object> entries = jp.readValueAs(new TypeReference<Map<String, Object>>() { }); final Iterator<Entry<String, Object>> it = entries.entrySet().iterator(); for (Entry<String, Object> next = null; it.hasNext(); next = it.next()) if (next != null && next.getValue() == null) { LOG.trace("Ignoring null value: {}", next); it.remove(); } return resultType.cast(ConfigFactory.create(resultType.asSubclass(Config.class), entries)); } // else if (Config.class.isAssignableFrom(resultType)) // throw new JsonGenerationException( // "Config does not extend "+Mutable.class.getName()+" required for deserialization: " // + Arrays.asList(resultType // .getInterfaces())); // can't parse directly to interface type final DynaBean bean = new DynaBean(); final TreeNode tree = jp.readValueAsTree(); // override attributes as defined in interface getters final Set<String> attributes = new HashSet<>(); for (Method method : resultType.getMethods()) { if (method.getReturnType().equals(Void.TYPE) || method.getParameterTypes().length != 0) continue; final String attribute = method.getName(); if (attribute.equals("toString") || attribute.equals("hashCode")) continue; attributes.add(attribute); final TreeNode value = tree.get(attribute);// bean.any().get(attributeName); if (value == null) continue; bean.set(method.getName(), om.treeToValue(value, JsonUtil.checkRegistered(om, method.getReturnType(), imports))); } if (tree.isObject()) { // keep superfluous properties as TreeNodes, just in case final Iterator<String> fieldNames = tree.fieldNames(); while (fieldNames.hasNext()) { final String fieldName = fieldNames.next(); if (!attributes.contains(fieldName)) bean.set(fieldName, tree.get(fieldName)); } } else if (tree.isValueNode()) { for (Class<?> type : resultType.getInterfaces()) for (Method method : type.getDeclaredMethods()) { // LOG.trace( "Scanning {}", method ); if (method.isAnnotationPresent(JsonProperty.class)) { final String property = method.getAnnotation(JsonProperty.class).value(); // LOG.trace( "Setting {}: {}", property, // ((ValueNode) tree).textValue() ); bean.set(property, ((ValueNode) tree).textValue()); } } } else throw ExceptionFactory.createUnchecked("Expected {} but parsed: {}", resultType, tree.getClass()); return DynaBean.proxyOf(om, resultType, bean, imports); } }; }