package org.transgalactica.management.rest.context.mvc; import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.transgalactica.management.rest.context.MapperConfig; import org.transgalactica.management.rest.converter.HeaderTypeHttpMessageConverter; import org.transgalactica.management.rest.converter.Jaxb2AbstractTypeHttpMessageConverter; import org.transgalactica.management.rest.hr.data.EmployeCommand; import org.transgalactica.management.rest.hr.data.MecanicienDetailDto; import org.transgalactica.management.rest.hr.data.PiloteCommand; import org.transgalactica.management.rest.hr.data.PiloteDetailDto; import org.transgalactica.management.rest.hr.data.impl.JaxbEmployeCommand; import org.transgalactica.management.rest.hr.data.impl.JaxbPiloteCommand; import org.transgalactica.management.rest.logistics.data.HangarCommand; import org.transgalactica.management.rest.logistics.data.VaisseauCommand; import org.transgalactica.management.rest.logistics.data.impl.JaxbHangarCommand; import org.transgalactica.management.rest.logistics.data.impl.JaxbVaisseauCommand; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.datatype.jsr310.JSR310Module; @Configuration @EnableWebMvc @Import(MapperConfig.class) @ComponentScan({ "org.transgalactica.management.rest.hr", "org.transgalactica.management.rest.logistics" }) public class WebMvcConfig extends WebMvcConfigurerAdapter { @Autowired private ApplicationContext context; protected WebMvcConfig() { } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable("default"); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); jsonConverter.setObjectMapper(jacksonObjectMapper()); HeaderTypeHttpMessageConverter<Object> headerJsonConverter = new HeaderTypeHttpMessageConverter<>(jsonConverter); headerJsonConverter.addMapping("PiloteCommand", PiloteCommand.class) // .addMapping("EmployeCommand", EmployeCommand.class) // .addMapping("MecanicienDetail", MecanicienDetailDto.class) // .addMapping("PiloteDetail", PiloteDetailDto.class); converters.add(headerJsonConverter); Jaxb2AbstractTypeHttpMessageConverter jaxbConverter = new Jaxb2AbstractTypeHttpMessageConverter(); jaxbConverter.addTypeMapping(HangarCommand.class, JaxbHangarCommand.class) .addTypeMapping(VaisseauCommand.class, JaxbVaisseauCommand.class) .addTypeMapping(EmployeCommand.class, JaxbEmployeCommand.class) .addTypeMapping(PiloteCommand.class, JaxbPiloteCommand.class); HeaderTypeHttpMessageConverter<Object> headerJaxbConverter = new HeaderTypeHttpMessageConverter<>(jaxbConverter); headerJaxbConverter.addMapping("PiloteCommand", PiloteCommand.class) // .addMapping("EmployeCommand", EmployeCommand.class) // .addMapping("MecanicienDetail", MecanicienDetailDto.class) // .addMapping("PiloteDetail", PiloteDetailDto.class); converters.add(headerJaxbConverter); } @Bean public ObjectMapper jacksonObjectMapper() { SimpleModule typeModule = new SimpleModule() // .addAbstractTypeMapping(HangarCommand.class, JaxbHangarCommand.class) // .addAbstractTypeMapping(VaisseauCommand.class, JaxbVaisseauCommand.class) // .addAbstractTypeMapping(EmployeCommand.class, JaxbEmployeCommand.class) // .addAbstractTypeMapping(PiloteCommand.class, JaxbPiloteCommand.class); return new ObjectMapper() // .disable(WRITE_DATES_AS_TIMESTAMPS) // .registerModules(typeModule, new JSR310Module()); } }