BAEL-4687: added test for each configuration
This commit is contained in:
parent
6e8b8c086d
commit
644939da07
|
@ -1,11 +1,12 @@
|
||||||
package com.baeldung.boot.jackson;
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
|
@ComponentScan(basePackages = "com.baeldung.boot.jackson.controller")
|
||||||
public class Application {
|
public class Application {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(Application.class, args);
|
SpringApplication.run(Application.class, args);
|
||||||
}
|
}
|
|
@ -1,60 +0,0 @@
|
||||||
package com.baeldung.boot.jackson.config;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
||||||
import com.fasterxml.jackson.databind.Module;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
||||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
|
||||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.context.annotation.Primary;
|
|
||||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
|
||||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
|
||||||
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class CoffeeConfiguration {
|
|
||||||
public static final String dateTimeFormat = "dd-MM-yyyy HH:mm";
|
|
||||||
private LocalDateTimeSerializer localDateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat));
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
|
|
||||||
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
|
|
||||||
.serializers(localDateTimeSerializer)
|
|
||||||
.serializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
return new MappingJackson2HttpMessageConverter(builder.build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
|
|
||||||
return builder -> builder.serializationInclusion(JsonInclude.Include.NON_NULL)
|
|
||||||
.serializers(localDateTimeSerializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@Primary
|
|
||||||
public ObjectMapper objectMapper() {
|
|
||||||
JavaTimeModule module = new JavaTimeModule();
|
|
||||||
module.addSerializer(localDateTimeSerializer);
|
|
||||||
return new ObjectMapper()
|
|
||||||
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
|
|
||||||
.registerModule(module);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@Primary
|
|
||||||
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
|
|
||||||
return new Jackson2ObjectMapperBuilder()
|
|
||||||
.serializers(localDateTimeSerializer)
|
|
||||||
.serializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public Module javaTimeModule() {
|
|
||||||
JavaTimeModule module = new JavaTimeModule();
|
|
||||||
module.addSerializer(localDateTimeSerializer);
|
|
||||||
return module;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.baeldung.boot.jackson.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||||
|
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class CoffeeConstants {
|
||||||
|
|
||||||
|
public static final String dateTimeFormat = "dd-MM-yyyy HH:mm";
|
||||||
|
public static LocalDateTimeSerializer localDateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat));
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.boot.jackson.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import static com.baeldung.boot.jackson.config.CoffeeConstants.localDateTimeSerializer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class CoffeeCustomizerConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
|
||||||
|
return builder -> builder.serializationInclusion(JsonInclude.Include.NON_NULL)
|
||||||
|
.serializers(localDateTimeSerializer);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.boot.jackson.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||||
|
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||||
|
|
||||||
|
import static com.baeldung.boot.jackson.config.CoffeeConstants.localDateTimeSerializer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class CoffeeHttpConverterConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
|
||||||
|
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
|
||||||
|
.serializers(localDateTimeSerializer)
|
||||||
|
.serializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
return new MappingJackson2HttpMessageConverter(builder.build());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.boot.jackson.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||||
|
|
||||||
|
import static com.baeldung.boot.jackson.config.CoffeeConstants.localDateTimeSerializer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class CoffeeJacksonBuilderConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
|
||||||
|
return new Jackson2ObjectMapperBuilder()
|
||||||
|
.serializers(localDateTimeSerializer)
|
||||||
|
.serializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.boot.jackson.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
|
||||||
|
import static com.baeldung.boot.jackson.config.CoffeeConstants.localDateTimeSerializer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class CoffeeObjectMapperConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public ObjectMapper objectMapper() {
|
||||||
|
JavaTimeModule module = new JavaTimeModule();
|
||||||
|
module.addSerializer(localDateTimeSerializer);
|
||||||
|
return new ObjectMapper()
|
||||||
|
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
|
||||||
|
.registerModule(module);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.boot.jackson.config;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.Module;
|
||||||
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
|
||||||
|
import static com.baeldung.boot.jackson.config.CoffeeConstants.localDateTimeSerializer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@PropertySource("classpath:coffee.properties")
|
||||||
|
public class CoffeeRegisterModuleConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Module javaTimeModule() {
|
||||||
|
JavaTimeModule module = new JavaTimeModule();
|
||||||
|
module.addSerializer(localDateTimeSerializer);
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,2 +0,0 @@
|
||||||
spring.jackson.default-property-inclusion=non_null
|
|
||||||
spring.jackson.serialization.write-dates-as-timestamps=false
|
|
|
@ -0,0 +1 @@
|
||||||
|
spring.jackson.default-property-inclusion=non_null
|
|
@ -1,6 +1,6 @@
|
||||||
package com.baeldung.boot.jackson;
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
import com.baeldung.boot.jackson.config.CoffeeConfiguration;
|
import com.baeldung.boot.jackson.config.CoffeeConstants;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
@ -12,20 +12,20 @@ import java.time.format.DateTimeFormatter;
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||||
public class CoffeeIntegrationTest {
|
public abstract class AbstractCoffeeIntegrationTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
TestRestTemplate restTemplate;
|
protected TestRestTemplate restTemplate;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenGetCoffee_thenSerializedWithDateAndNonNull() {
|
public void whenGetCoffee_thenSerializedWithDateAndNonNull() {
|
||||||
String formattedDate = DateTimeFormatter.ofPattern(CoffeeConfiguration.dateTimeFormat)
|
String formattedDate = DateTimeFormatter.ofPattern(CoffeeConstants.dateTimeFormat)
|
||||||
.format(LocalDateTime.now());
|
.format(LocalDateTime.now());
|
||||||
|
|
||||||
String brand = "Lavazza";
|
String brand = "Lavazza";
|
||||||
|
|
||||||
String url = "/coffee?brand=" + brand;
|
String url = "/coffee?brand=" + brand;
|
||||||
String response = restTemplate.getForObject(url, String.class);
|
String response = restTemplate.getForObject(url, String.class);
|
||||||
|
|
||||||
assertThat(response).isEqualTo(
|
assertThat(response).isEqualTo(
|
||||||
"{\"brand\":\"" + brand + "\",\"date\":\"" + formattedDate + "\"}");
|
"{\"brand\":\"" + brand + "\",\"date\":\"" + formattedDate + "\"}");
|
||||||
}
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
|
import com.baeldung.boot.jackson.config.CoffeeCustomizerConfig;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
@Import(CoffeeCustomizerConfig.class)
|
||||||
|
public class CoffeeCustomizerIntegrationTest extends AbstractCoffeeIntegrationTest {
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
|
import com.baeldung.boot.jackson.config.CoffeeHttpConverterConfiguration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
@Import(CoffeeHttpConverterConfiguration.class)
|
||||||
|
public class CoffeeHttpConverterIntegrationTest extends AbstractCoffeeIntegrationTest {
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
|
import com.baeldung.boot.jackson.config.CoffeeJacksonBuilderConfig;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
@Import(CoffeeJacksonBuilderConfig.class)
|
||||||
|
public class CoffeeJacksonBuilderIntegrationTest extends AbstractCoffeeIntegrationTest {
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
|
import com.baeldung.boot.jackson.config.CoffeeObjectMapperConfig;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
@Import(CoffeeObjectMapperConfig.class)
|
||||||
|
public class CoffeeObjectMapperIntegrationTest extends AbstractCoffeeIntegrationTest {
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.boot.jackson.app;
|
||||||
|
|
||||||
|
import com.baeldung.boot.jackson.config.CoffeeRegisterModuleConfig;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
@Import(CoffeeRegisterModuleConfig.class)
|
||||||
|
public class CoffeeRegisterModuleIntegrationTest extends AbstractCoffeeIntegrationTest {
|
||||||
|
}
|
Loading…
Reference in New Issue