public static HttpMessageConverter<Object> createMappingJackson2HttpMessageConverter() { final Jackson2ObjectMapperFactoryBean objectMapperFactoryBean = new Jackson2ObjectMapperFactoryBean(); objectMapperFactoryBean.setFailOnEmptyBeans(true); objectMapperFactoryBean.setIndentOutput(true); objectMapperFactoryBean.setDateFormat(new SimpleDateFormat("MM/dd/yyyy")); objectMapperFactoryBean.setFeaturesToDisable( com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); objectMapperFactoryBean.setFeaturesToEnable( com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_COMMENTS, com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); objectMapperFactoryBean.afterPropertiesSet(); final MappingJackson2HttpMessageConverter httpMessageConverter = new MappingJackson2HttpMessageConverter(); httpMessageConverter.setObjectMapper(objectMapperFactoryBean.getObject()); return httpMessageConverter; }
@Test public void nonDefaultSerializationInclusion() { this.factory.setSerializationInclusion(Include.NON_DEFAULT); this.factory.afterPropertiesSet(); assertSame(Include.NON_DEFAULT, this.factory.getObject().getSerializationConfig().getSerializationInclusion()); }
@Test(expected = FatalBeanException.class) public void unknownFeature() { this.factory.setFeaturesToEnable(Boolean.TRUE); this.factory.afterPropertiesSet(); }
@Test public void setCreateXmlMapper() { this.factory.setCreateXmlMapper(true); this.factory.afterPropertiesSet(); assertNotNull(this.factory.getObject()); assertTrue(this.factory.isSingleton()); assertEquals(XmlMapper.class, this.factory.getObjectType()); }
ObjectMapper objectMapper = new ObjectMapper(); this.factory.setObjectMapper(objectMapper); assertTrue(this.factory.isSingleton()); assertEquals(ObjectMapper.class, this.factory.getObjectType()); 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, this.factory.setSerializationInclusion(Include.NON_NULL); this.factory.afterPropertiesSet(); assertSame(objectMapper, this.factory.getObject()); assertTrue(getSerializerFactoryConfig(objectMapper).hasSerializers()); assertTrue(getDeserializerFactoryConfig(objectMapper).hasDeserializers());
@Test public void booleanSetters() { this.factory.setAutoDetectFields(false); this.factory.setAutoDetectGettersSetters(false); this.factory.setDefaultViewInclusion(false); this.factory.setFailOnEmptyBeans(false); this.factory.setIndentOutput(true); this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.AUTO_DETECT_FIELDS)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.AUTO_DETECT_FIELDS)); assertFalse(objectMapper.getSerializationConfig().isEnabled(MapperFeature.AUTO_DETECT_GETTERS)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.AUTO_DETECT_SETTERS)); assertFalse(objectMapper.getDeserializationConfig().isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); assertFalse(objectMapper.getSerializationConfig().isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)); assertTrue(objectMapper.getSerializationConfig().isEnabled(SerializationFeature.INDENT_OUTPUT)); assertSame(Include.ALWAYS, objectMapper.getSerializationConfig().getSerializationInclusion()); }
@Test public void setTimeZone() { TimeZone timeZone = TimeZone.getTimeZone("Europe/Paris"); this.factory.setTimeZone(timeZone); this.factory.afterPropertiesSet(); assertEquals(timeZone, this.factory.getObject().getSerializationConfig().getTimeZone()); assertEquals(timeZone, this.factory.getObject().getDeserializationConfig().getTimeZone()); }
@Test // SPR-14435 public void setFactory() { this.factory.setFactory(new SmileFactory()); this.factory.afterPropertiesSet(); assertNotNull(this.factory.getObject()); assertTrue(this.factory.isSingleton()); assertEquals(SmileFactory.class, this.factory.getObject().getFactory().getClass()); }
@Test public void setMixIns() { Class<?> target = String.class; Class<?> mixinSource = Object.class; Map<Class<?>, Class<?>> mixIns = new HashMap<>(); mixIns.put(target, mixinSource); this.factory.setModules(Collections.emptyList()); this.factory.setMixIns(mixIns); this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); assertEquals(1, objectMapper.mixInCount()); assertSame(mixinSource, objectMapper.findMixInClassFor(target)); }
Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean = new Jackson2ObjectMapperFactoryBean(); jackson2ObjectMapperFactoryBean.setSerializationInclusion(JsonInclude.Include.NON_NULL); jackson2ObjectMapperFactoryBean.afterPropertiesSet(); ObjectMapper objectMapper = jackson2ObjectMapperFactoryBean.getObject(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
@Test public void setDateFormat() { this.factory.setDateFormat(this.dateFormat); this.factory.afterPropertiesSet(); assertEquals(this.dateFormat, this.factory.getObject().getSerializationConfig().getDateFormat()); assertEquals(this.dateFormat, this.factory.getObject().getDeserializationConfig().getDateFormat()); }
@Test // SPR-12634 @SuppressWarnings("unchecked") public void customizeDefaultModulesWithModuleClass() throws JsonProcessingException, UnsupportedEncodingException { this.factory.setModulesToInstall(CustomIntegerModule.class); this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); DateTime dateTime = new DateTime(1322903730000L, DateTimeZone.UTC); assertEquals("1322903730000", new String(objectMapper.writeValueAsBytes(dateTime), "UTF-8")); assertThat(new String(objectMapper.writeValueAsBytes(new Integer(4)), "UTF-8"), containsString("customid")); }
@Test // SPR-12634 public void customizeDefaultModulesWithSerializer() throws JsonProcessingException, UnsupportedEncodingException { Map<Class<?>, JsonSerializer<?>> serializers = new HashMap<>(); serializers.put(Integer.class, new CustomIntegerSerializer()); this.factory.setSerializersByType(serializers); this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); DateTime dateTime = new DateTime(1322903730000L, DateTimeZone.UTC); assertEquals("1322903730000", new String(objectMapper.writeValueAsBytes(dateTime), "UTF-8")); assertThat(new String(objectMapper.writeValueAsBytes(new Integer(4)), "UTF-8"), containsString("customid")); }
@Test public void defaultModules() throws JsonProcessingException, UnsupportedEncodingException { this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); Long timestamp = 1322903730000L; DateTime dateTime = new DateTime(timestamp, DateTimeZone.UTC); assertEquals(timestamp.toString(), new String(objectMapper.writeValueAsBytes(dateTime), "UTF-8")); }
@Test public void setFilters() throws JsonProcessingException { this.factory.setFilters(new SimpleFilterProvider().setFailOnUnknownId(false)); this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); JacksonFilteredBean bean = new JacksonFilteredBean("value1", "value2"); String output = objectMapper.writeValueAsString(bean); assertThat(output, containsString("value1")); assertThat(output, containsString("value2")); }
@Test public void setSimpleDateFormat() { this.factory.setSimpleDateFormat(DATE_FORMAT); this.factory.afterPropertiesSet(); assertEquals(this.dateFormat, this.factory.getObject().getSerializationConfig().getDateFormat()); assertEquals(this.dateFormat, this.factory.getObject().getDeserializationConfig().getDateFormat()); }
@Test public void setLocale() { this.factory.setLocale(Locale.FRENCH); this.factory.afterPropertiesSet(); assertEquals(Locale.FRENCH, this.factory.getObject().getSerializationConfig().getLocale()); assertEquals(Locale.FRENCH, this.factory.getObject().getDeserializationConfig().getLocale()); }
@Test public void setModules() { NumberSerializer serializer = new NumberSerializer(Integer.class); SimpleModule module = new SimpleModule(); module.addSerializer(Integer.class, serializer); this.factory.setModules(Arrays.asList(new Module[]{module})); this.factory.afterPropertiesSet(); ObjectMapper objectMapper = this.factory.getObject(); Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next(); assertSame(serializer, serializers.findSerializer(null, SimpleType.construct(Integer.class), null)); }
@Test public void propertyNamingStrategy() { PropertyNamingStrategy strategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy(); this.factory.setPropertyNamingStrategy(strategy); this.factory.afterPropertiesSet(); assertSame(strategy, this.factory.getObject().getSerializationConfig().getPropertyNamingStrategy()); assertSame(strategy, this.factory.getObject().getDeserializationConfig().getPropertyNamingStrategy()); }
@Override public ObjectMapper getObject() { ObjectMapper objectMapper = super.getObject(); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); return objectMapper; } }