@Override public Date deserialize(final JsonParser parser, final DeserializationContext context) throws IOException { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); final String date = parser.getText(); try { return formatter.parse(date); } catch (final ParseException ex) { // Not worked, so let the default date serializer give it a try. return DateDeserializer.instance.deserialize(parser, context); } }
@SuppressWarnings("unchecked") public static Object deserialize(String json, String containerType, @SuppressWarnings("rawtypes") Class cls) throws ApiException { try{ ObjectMapper mapper = JsonUtil.getJsonMapper(); SimpleModule m = new SimpleModule(PACKAGE_NAME, Version.unknownVersion()); m.addDeserializer(Date.class, new CustomDateDeserializer(new DateDeserializer())); mapper.registerModule(m); if("List".equals(containerType)) { JavaType typeInfo = mapper.getTypeFactory().constructCollectionType(List.class, cls); List<?> response = (List<?>) mapper.readValue(json, typeInfo); return response; } else if(String.class.equals(cls)) { return json; } else { return mapper.readValue(json, cls); } } catch (IOException e) { throw new ApiException(500, e.getMessage()); } }
public static Object deserialize(String json, String containerType, Class cls) throws ApiException { try{ ObjectMapper mapper = JsonUtil.getJsonMapper(); SimpleModule m = new SimpleModule(PACKAGE_NAME, Version.unknownVersion()); m.addDeserializer(Date.class, new CustomDateDeserializer(new DateDeserializer())); mapper.registerModule(m); if("List".equals(containerType)) { JavaType typeInfo = mapper.getTypeFactory().constructCollectionType(List.class, cls); List response = (List<?>) mapper.readValue(json, typeInfo); return response; } else if(String.class.equals(cls)) { return json; } else { return mapper.readValue(json, cls); } } catch (IOException e) { throw new ApiException(500, e.getMessage()); } }
@Override public Date deserialize(final JsonParser parser, final DeserializationContext context) throws IOException, JsonProcessingException { final String date = parser.getText(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); try { return simpleDateFormat.parse(date); } catch (final ParseException ex) { // Not worked, so let the default date serializer give it a try. return DateDeserializer.instance.deserialize(parser, context); } }
@Test public void completeSetup() { NopAnnotationIntrospector annotationIntrospector = NopAnnotationIntrospector.instance; ObjectMapper objectMapper = new ObjectMapper(); this.factory.setObjectMapper(objectMapper); assertTrue(this.factory.isSingleton()); assertEquals(ObjectMapper.class, this.factory.getObjectType()); Map<Class<?>, JsonDeserializer<?>> deserializers = new HashMap<Class<?>, JsonDeserializer<?>>(); deserializers.put(Date.class, new DateDeserializer()); JsonSerializer<Class<?>> serializer1 = new ClassSerializer(); JsonSerializer<Number> serializer2 = new NumberSerializer(Integer.class); // Disable well-known modules detection this.factory.setModules(new ArrayList<>()); this.factory.setSerializers(serializer1); this.factory.setSerializersByType(Collections.singletonMap(Boolean.class, serializer2)); this.factory.setDeserializersByType(deserializers); this.factory.setAnnotationIntrospector(annotationIntrospector); this.factory.setFeaturesToEnable(SerializationFeature.FAIL_ON_EMPTY_BEANS, DeserializationFeature.UNWRAP_ROOT_VALUE, JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS); this.factory.setFeaturesToDisable(MapperFeature.AUTO_DETECT_GETTERS, MapperFeature.AUTO_DETECT_FIELDS, JsonParser.Feature.AUTO_CLOSE_SOURCE, JsonGenerator.Feature.QUOTE_FIELD_NAMES); assertFalse(getSerializerFactoryConfig(objectMapper).hasSerializers()); assertFalse(getDeserializerFactoryConfig(objectMapper).hasDeserializers()); this.factory.setSerializationInclusion(Include.NON_NULL); this.factory.afterPropertiesSet(); assertSame(objectMapper, this.factory.getObject()); assertTrue(getSerializerFactoryConfig(objectMapper).hasSerializers()); assertTrue(getDeserializerFactoryConfig(objectMapper).hasDeserializers()); Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next(); assertSame(serializer1, serializers.findSerializer(null, SimpleType.construct(Class.class), null)); assertSame(serializer2, serializers.findSerializer(null, SimpleType.construct(Boolean.class), null)); assertNull(serializers.findSerializer(null, SimpleType.construct(Number.class), null)); assertSame(annotationIntrospector, objectMapper.getSerializationConfig().getAnnotationIntrospector()); assertSame(annotationIntrospector, objectMapper.getDeserializationConfig().getAnnotationIntrospector()); assertTrue(objectMapper.getSerializationConfig().isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)); assertTrue(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.UNWRAP_ROOT_VALUE)); assertTrue(objectMapper.getFactory().isEnabled(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER)); assertTrue(objectMapper.getFactory().isEnabled(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS)); assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.AUTO_DETECT_GETTERS)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.AUTO_DETECT_FIELDS)); assertFalse(objectMapper.getFactory().isEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE)); assertFalse(objectMapper.getFactory().isEnabled(JsonGenerator.Feature.QUOTE_FIELD_NAMES)); assertSame(Include.NON_NULL, objectMapper.getSerializationConfig().getSerializationInclusion()); }
@Override protected DateDeserializer withDateFormat(DateFormat df, String formatString) { return new DateDeserializer(this, new CustomDateFormat(formatString), formatString); }
@Test public void testCompleteSetup() { NopAnnotationIntrospector annotationIntrospector = NopAnnotationIntrospector.instance; ObjectMapper objectMapper = new ObjectMapper(); assertTrue(this.factory.isSingleton()); assertEquals(ObjectMapper.class, this.factory.getObjectType()); Map<Class<?>, JsonDeserializer<?>> deserializers = new HashMap<Class<?>, JsonDeserializer<?>>(); deserializers.put(Date.class, new DateDeserializer()); this.factory.setObjectMapper(objectMapper); this.factory.setSerializers(new ClassSerializer()); this.factory.setDeserializersByType(deserializers); this.factory.setAnnotationIntrospector(annotationIntrospector); this.factory.setFeaturesToEnable( SerializationFeature.FAIL_ON_EMPTY_BEANS, DeserializationFeature.UNWRAP_ROOT_VALUE, JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS); this.factory.setFeaturesToDisable( MapperFeature.AUTO_DETECT_GETTERS, MapperFeature.AUTO_DETECT_FIELDS, JsonParser.Feature.AUTO_CLOSE_SOURCE, JsonGenerator.Feature.QUOTE_FIELD_NAMES); assertFalse(getSerializerFactoryConfig(objectMapper).hasSerializers()); assertFalse(getDeserializerFactoryConfig(objectMapper).hasDeserializers()); this.factory.afterPropertiesSet(); assertTrue(objectMapper == this.factory.getObject()); assertTrue(getSerializerFactoryConfig(objectMapper).hasSerializers()); assertTrue(getDeserializerFactoryConfig(objectMapper).hasDeserializers()); assertTrue(annotationIntrospector == objectMapper.getSerializationConfig().getAnnotationIntrospector()); assertTrue(annotationIntrospector == objectMapper.getDeserializationConfig().getAnnotationIntrospector()); assertTrue(objectMapper.getSerializationConfig().isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)); assertTrue(objectMapper.getDeserializationConfig().isEnabled(DeserializationFeature.UNWRAP_ROOT_VALUE)); assertTrue(objectMapper.getJsonFactory().isEnabled(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER)); assertTrue(objectMapper.getJsonFactory().isEnabled(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS)); assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.AUTO_DETECT_GETTERS)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.AUTO_DETECT_FIELDS)); assertFalse(objectMapper.getJsonFactory().isEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE)); assertFalse(objectMapper.getJsonFactory().isEnabled(JsonGenerator.Feature.QUOTE_FIELD_NAMES)); }
public CustomDateDeserializer(DateDeserializer base){ super(base, new SimpleDateFormat(DATE_FORMAT), DATE_FORMAT); }