Commit 331fc433 authored by duanruiming's avatar duanruiming

[update] 解决包问题

parent c0856a1e
package net.wanji.web.config; package net.wanji.web.config;
import org.springframework.beans.BeansException; import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils; import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.builders.RequestHandlerSelectors;
...@@ -13,12 +19,11 @@ import springfox.documentation.service.ApiInfo; ...@@ -13,12 +19,11 @@ import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact; import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.lang.reflect.Field; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Configuration @Configuration
@EnableSwagger2 @EnableSwagger2
...@@ -49,52 +54,39 @@ public class Swagger2 { ...@@ -49,52 +54,39 @@ public class Swagger2 {
.build(); .build();
} }
// @Bean
// public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
// List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
// Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
// allEndpoints.addAll(webEndpoints);
// allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
// allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
// String basePath = webEndpointProperties.getBasePath();
// EndpointMapping endpointMapping = new EndpointMapping(basePath);
// boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
// return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
// }
//
// private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
// return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
// }
@Bean @Bean
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(
return new BeanPostProcessor() { WebEndpointsSupplier webEndpointsSupplier,
@Override ServletEndpointsSupplier servletEndpointsSupplier,
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { ControllerEndpointsSupplier controllerEndpointsSupplier,
if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxAutoConfiguration) { EndpointMediaTypes endpointMediaTypes,
customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); CorsEndpointProperties corsProperties,
} WebEndpointProperties webEndpointProperties,
return bean; Environment environment) {
List<ExposableEndpoint<?>> allEndpoints = new ArrayList<ExposableEndpoint<?>>();
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
allEndpoints.addAll(webEndpoints);
allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
String basePath = webEndpointProperties.getBasePath();
EndpointMapping endpointMapping = new EndpointMapping(basePath);
boolean shouldRegisterLinksMapping =
this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
return new WebMvcEndpointHandlerMapping(
endpointMapping,
webEndpoints,
endpointMediaTypes,
corsProperties.toCorsConfiguration(),
new EndpointLinksResolver(allEndpoints, basePath),
shouldRegisterLinksMapping,
null);
} }
private void customizeSpringfoxHandlerMappings(List mappings) { private boolean shouldRegisterLinksMapping(
List copy = (List) mappings.stream() WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
.filter(mapping -> mapping == null) return webEndpointProperties.getDiscovery().isEnabled()
.collect(Collectors.toList()); && (StringUtils.hasText(basePath)
mappings.clear(); || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
mappings.addAll(copy);
} }
@SuppressWarnings("unchecked")
private List getHandlerMappings(Object bean) {
try {
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
field.setAccessible(true);
return (List) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
};
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment