@Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 // Include.Include.ALWAYS 默认 // Include.NON_DEFAULT 属性为默认值不序列化 // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 字段保留,将null值转为"" // objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() // { // @Override // public void serialize(Object o, JsonGenerator jsonGenerator, // SerializerProvider serializerProvider) // throws IOException, JsonProcessingException // { // jsonGenerator.writeString(""); // } // }); return objectMapper; } }
@Test(expected = FatalBeanException.class) public void unknownFeature() { Jackson2ObjectMapperBuilder.json().featuresToEnable(Boolean.TRUE).build(); }
/** * Obtain a {@link Jackson2ObjectMapperBuilder} instance in order to * build an {@link XmlMapper} instance. */ public static Jackson2ObjectMapperBuilder xml() { return new Jackson2ObjectMapperBuilder().createXmlMapper(true); }
@Bean public ObjectMapper objectMapper() { return Jackson2ObjectMapperBuilder.json() .serializationInclusion(JsonInclude.Include.NON_NULL) .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).modules(new JavaTimeModule()).build(); }
@Test public void setNotEmptySerializationInclusion() { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build(); assertSame(JsonInclude.Include.ALWAYS, objectMapper.getSerializationConfig().getSerializationInclusion()); objectMapper = Jackson2ObjectMapperBuilder.json().serializationInclusion(JsonInclude.Include.NON_EMPTY).build(); assertSame(JsonInclude.Include.NON_EMPTY, objectMapper.getSerializationConfig().getSerializationInclusion()); }
private List<HttpMessageConverter<?>> getMessageConverters() { List<HttpMessageConverter<?>> xs = new ArrayList<HttpMessageConverter<?>>(); final Jackson2ObjectMapperBuilder bldr = Jackson2ObjectMapperBuilder .json() .serializationInclusion(JsonInclude.Include.NON_NULL) .featuresToEnable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT); xs.add(new MappingJackson2HttpMessageConverter(bldr.build())); return xs; }
@Test // SPR-12634 public void customizeWellKnownModulesWithModule() throws JsonProcessingException, UnsupportedEncodingException { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() .modulesToInstall(new CustomIntegerModule()) .build(); 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")); }
JsonSerializer<Number> serializer2 = new NumberSerializer(Integer.class); Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json() .modules(new ArrayList<>()) // Disable well-known modules detection .serializers(serializer1) .serializersByType(Collections.singletonMap(Boolean.class, serializer2)) .deserializersByType(deserializerMap) .annotationIntrospector(annotationIntrospector) .featuresToEnable(SerializationFeature.FAIL_ON_EMPTY_BEANS, DeserializationFeature.UNWRAP_ROOT_VALUE, JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS) .featuresToDisable(MapperFeature.AUTO_DETECT_GETTERS, MapperFeature.AUTO_DETECT_FIELDS, JsonParser.Feature.AUTO_CLOSE_SOURCE, JsonGenerator.Feature.QUOTE_FIELD_NAMES) .serializationInclusion(JsonInclude.Include.NON_NULL); builder.configure(mapper);
@Bean public ObjectMapper objectMapper() { // Registers com.fasterxml.jackson.datatype.jsr310.JavaTimeModule automatically ObjectMapper objectMapper = Jackson2ObjectMapperBuilder .json() .indentOutput(true) .featuresToDisable(WRITE_DATES_AS_TIMESTAMPS) .serializationInclusion(NON_ABSENT) .build(); customizeObjectMapper(objectMapper); return objectMapper; }
@Bean public Jackson2ObjectMapperBuilder objectMapperBuilder() { return new Jackson2ObjectMapperBuilder() .serializationInclusion(JsonInclude.Include.NON_EMPTY) .featuresToDisable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES ) .featuresToEnable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY) .indentOutput(true); } }
@Bean public ObjectMapper objectMapper(){ Jackson2ObjectMapperBuilder j2omb = new Jackson2ObjectMapperBuilder(); return j2omb.autoDetectFields(true) .autoDetectGettersSetters(true) .createXmlMapper(false) .failOnEmptyBeans(false) .failOnUnknownProperties(false) .featuresToEnable( JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, // 无引号json 非json规约 默认false JsonParser.Feature.ALLOW_SINGLE_QUOTES, // 单引号json JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, // bigdecimal.toPlainString SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS, // ['a','b','c'] not "abc" DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, // unknown enum -> null DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, // [] -> null DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT // "" -> null ) .build(); }
@Configuration @EnableWebMvc public class WebConfiguration extends WebMvcConfigurerAdapter { ... other configurations @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); builder.serializationInclusion(JsonInclude.Include.NON_NULL); builder.propertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); builder.serializationInclusion(Include.NON_EMPTY); builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd")); converters.add(new MappingJackson2HttpMessageConverter(builder.build())); converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build())); } }
@Test public void createXmlMapper() { Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json().indentOutput(true); ObjectMapper jsonObjectMapper = builder.build(); ObjectMapper xmlObjectMapper = builder.createXmlMapper(true).build(); assertTrue(jsonObjectMapper.isEnabled(SerializationFeature.INDENT_OUTPUT)); assertTrue(xmlObjectMapper.isEnabled(SerializationFeature.INDENT_OUTPUT)); assertTrue(xmlObjectMapper.getClass().isAssignableFrom(XmlMapper.class)); }
@Test public void booleanSetters() { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() .featuresToEnable(MapperFeature.DEFAULT_VIEW_INCLUSION, DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, SerializationFeature.INDENT_OUTPUT) .featuresToDisable(MapperFeature.AUTO_DETECT_FIELDS, MapperFeature.AUTO_DETECT_GETTERS, MapperFeature.AUTO_DETECT_SETTERS, SerializationFeature.FAIL_ON_EMPTY_BEANS).build(); assertNotNull(objectMapper); assertTrue(objectMapper.isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION)); assertTrue(objectMapper.isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)); assertFalse(objectMapper.isEnabled(MapperFeature.AUTO_DETECT_FIELDS)); assertFalse(objectMapper.isEnabled(MapperFeature.AUTO_DETECT_GETTERS)); assertFalse(objectMapper.isEnabled(MapperFeature.AUTO_DETECT_SETTERS)); assertTrue(objectMapper.isEnabled(SerializationFeature.INDENT_OUTPUT)); assertFalse(objectMapper.isEnabled(SerializationFeature.FAIL_ON_EMPTY_BEANS)); }
private static Jackson2ObjectMapperBuilder getDefaultBuilder() { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() .indentOutput(false) .createXmlMapper(false) .dateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")) .failOnUnknownProperties(false) .featuresToEnable(ALLOW_NON_NUMERIC_NUMBERS) .featuresToEnable(ALLOW_SINGLE_QUOTES) .serializationInclusion(JsonInclude.Include.NON_NULL) .modules(new JodaModule()); return builder; }
@Test public void serializerByType() { JsonSerializer<Number> serializer = new NumberSerializer(Integer.class); ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() .modules(new ArrayList<>()) // Disable well-known modules detection .serializerByType(Boolean.class, serializer) .build(); assertTrue(getSerializerFactoryConfig(objectMapper).hasSerializers()); Serializers serializers = getSerializerFactoryConfig(objectMapper).serializers().iterator().next(); assertSame(serializer, serializers.findSerializer(null, SimpleType.construct(Boolean.class), null)); }
@Bean public Jackson2ObjectMapperBuilder jacksonBuilder() { Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json(); builder.indentOutput(false) .dateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")) .failOnUnknownProperties(false) .featuresToEnable(ALLOW_NON_NUMERIC_NUMBERS) .featuresToEnable(ALLOW_SINGLE_QUOTES) .serializationInclusion(JsonInclude.Include.NON_NULL) .modules(new JodaModule(), new Hibernate5Module()); return builder; }