com.alibaba.boot.web.autoconfigure.ContentNegotiationManagerConfiguration Maven / Gradle / Ivy
package com.alibaba.boot.web.autoconfigure;
import com.alibaba.boot.web.condition.ConditionalOnPropertyPrefix;
import com.alibaba.spring.util.PropertySourcesUtils;
import com.alibaba.spring.web.servlet.config.annotation.ConfigurableContentNegotiationManagerWebMvcConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.HashMap;
import java.util.Map;
import static com.alibaba.boot.web.util.WebSupportUtils.CONTENT_NEGOTIATION_MANAGER_PROPERTY_NAME_PREFIX;
/**
* {@link ContentNegotiationManager} {@link Configuration}
*
* @author Mercy
* @see ContentNegotiationManager
* @since 2017.03.29
*/
@ConditionalOnWebApplication
@ConditionalOnBean(WebMvcConfigurationSupport.class)
@ConditionalOnPropertyPrefix({CONTENT_NEGOTIATION_MANAGER_PROPERTY_NAME_PREFIX})
@AutoConfigureAfter(name = {
"org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration", // compatible with Spring Boot 1.x
"org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration" // compatible with Spring Boot 2.0
})
public class ContentNegotiationManagerConfiguration {
@Bean
public WebMvcConfigurer configurableContentNegotiationManagerWebMvcConfigurer(ConfigurableEnvironment environment) {
Map properties = new HashMap();
Map subProperties = PropertySourcesUtils.getSubProperties(environment.getPropertySources(),
CONTENT_NEGOTIATION_MANAGER_PROPERTY_NAME_PREFIX);
for (Map.Entry entry : subProperties.entrySet()) {
properties.put(entry.getKey(), entry.getValue().toString());
}
return new ConfigurableContentNegotiationManagerWebMvcConfigurer(properties);
}
}