package com.xboe.config; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @Configuration public class WebConfig implements WebMvcConfigurer { private static final Logger logger = LoggerFactory.getLogger(WebConfig.class); @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorParameter(true) .defaultContentType(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML) .parameterName("mediaType") .mediaType("json", MediaType.APPLICATION_JSON) .mediaType("xml", MediaType.APPLICATION_XML); } //结果处理器 @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) { return new LoggingMappingJackson2HttpMessageConverter(objectMapper); } @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); return mapper; } /** * 在默认的消息转换器基础上添加或移除某些转换器 * 保证StringHttpMessageConverter在FastJsonHttpMessageConverter前被调用 * * @param converters the list of configured converters to be extended */ @Override public void extendMessageConverters(List> converters) { converters.removeIf(t -> t instanceof MappingJackson2HttpMessageConverter || t instanceof MappingJackson2CborHttpMessageConverter); converters.add(mappingJackson2HttpMessageConverter(objectMapper())); for (HttpMessageConverter converterLoop : converters) { logger.info("==######### Registered e message converter: {}", converterLoop.getClass().getName()); } } // @Override // public void configureMessageConverters(List> converters) { // converters.add(mappingJackson2HttpMessageConverter(new ObjectMapper())); // for (HttpMessageConverter converter : converters) { // logger.info("==#########Registered message converter: {}", converter.getClass().getName()); // } // } }