![JAR search and dependency download from the Maven repository](/logo.png)
org.zodiac.autoconfigure.web.ServletHttpMessageAutoConfiguration Maven / Gradle / Ivy
package org.zodiac.autoconfigure.web;
import java.util.Iterator;
import java.util.List;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.format.FormatterRegistry;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.ResourceRegionHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.zodiac.autoconfigure.jackson.PlatformJacksonOptionProperties;
import org.zodiac.commons.util.Colls;
import org.zodiac.commons.util.DateTimes;
import org.zodiac.commons.util.lang.Strings;
import org.zodiac.core.web.http.converter.MappingApiJackson2HttpMessageConverter;
import org.zodiac.core.web.http.converter.StringOrJsonHttpMessageConverter;
import org.zodiac.core.web.remote.servlet.RemoteApiFilterInterceptor;
import org.zodiac.core.web.servlet.ConventionalMethodArgumentResolver;
import com.fasterxml.jackson.databind.ObjectMapper;
@SpringBootConfiguration
@Order(value = Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(value = {javax.servlet.Servlet.class, org.springframework.web.servlet.DispatcherServlet.class})
public class ServletHttpMessageAutoConfiguration implements WebMvcConfigurer {
private final ObjectMapper objectMapper;
private final RemoteApiFilterInterceptor remoteApiFilterInterceptor;
private final PlatformJacksonOptionProperties platformJacksonOptionProperties;
public ServletHttpMessageAutoConfiguration(ObjectProvider objectMapperProvider,
ObjectProvider remoteApiFilterInterceptorProvider,
PlatformJacksonOptionProperties platformJacksonOptionProperties) {
this.objectMapper = objectMapperProvider.getIfAvailable();
this.remoteApiFilterInterceptor = remoteApiFilterInterceptorProvider.getIfAvailable();
this.platformJacksonOptionProperties = platformJacksonOptionProperties;
}
/*使用 JACKSON 作为JSON MessageConverter 消息转换,内置断点续传,下载和字符串。*/
@Override
public void configureMessageConverters(List> converters) {
converters.removeIf(
x -> x instanceof StringHttpMessageConverter || x instanceof AbstractJackson2HttpMessageConverter);
converters.add(new StringHttpMessageConverter(platformJacksonOptionProperties.getCharset()));
converters.add(new ByteArrayHttpMessageConverter());
converters.add(new ResourceHttpMessageConverter());
converters.add(new ResourceRegionHttpMessageConverter());
converters.add(new MappingApiJackson2HttpMessageConverter(platformJacksonOptionProperties, objectMapper));
if (null != remoteApiFilterInterceptor) {
Iterator> it = converters.iterator();
List> customeCovertList = Colls.list();
while (it.hasNext()) {
HttpMessageConverter> converter = it.next();
if (!Strings.startsWithIgnoreCase(converter.getClass().getName(), "org.springframework")) {
customeCovertList.add(converter);
}
}
converters.removeAll(customeCovertList);
StringOrJsonHttpMessageConverter converter = objectMapper == null ? new StringOrJsonHttpMessageConverter()
: new StringOrJsonHttpMessageConverter(objectMapper);
if (!customeCovertList.isEmpty()) {
converters.addAll(0, customeCovertList);
converters.add(customeCovertList.size(), converter);
} else {
converters.add(0, converter);
}
}
}
/*日期格式化*/
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter(DateTimes.FORMAT_10));
registry.addFormatter(new DateFormatter(DateTimes.FORMAT_22_b));
}
@Override
public void addArgumentResolvers(List resolvers) {
resolvers.add(new ConventionalMethodArgumentResolver());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy