我有一个Spring Boot Rest Web服务。我还将swagger-ui的静态内容添加到src / main / resources / static.swagger-ui中,以便我可以访问我的文档。
默认情况下,SimpleUrlHandlerMapping会在启动时自动将我的请求映射到静态内容。
...
2017-09-07 15:41:21.144 INFO 6912 --- [localhost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-09-07 15:41:21.144 INFO 6912 --- [localhost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-09-07 15:41:21.212 INFO 6912 --- [localhost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
...
我在gradle文件中添加了对Application Insights的引用
... part of my gradle file
// Application Insight related jar - required for telemetrics and loggers
compile("com.microsoft.azure:applicationinsights-web:${aiWeb}")
compile("com.microsoft.azure:applicationinsights-logging-logback:${aiLogback}")
...
这在某种程度上打破了SimpleUrlHandlerMapping,因为映射到静态内容不再起作用。
知道怎么解决吗?我可以手动添加mapper ...
我的筹码:
答案 0 :(得分:0)
经过一整天的调试后,我认为我找到了一个根本原因(肯定是解决方法)
根据Spring Boot的documentation,它自动配置Spring MVC。这涉及静态内容的配置。
如果我们看一下 applicationinsights.web pacakge,就会有一个名为InterceptorRegistry的类
package com.microsoft.applicationinsights.web.spring.internal;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.microsoft.applicationinsights.web.spring.RequestNameHandlerInterceptorAdapter;
/**
* This class registers the RequestNameHandlerInterceptorAdapter to the interceptors registry.
* The registration enables the interceptor to extract the http request's controller and action names.
*/
@EnableWebMvc
@Configuration
public class InterceptorRegistry extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry registry) {
registry.addInterceptor(new RequestNameHandlerInterceptorAdapter());
}
}
这就是文档所说的:
如果你想保留Spring Boot MVC功能,你只想添加 额外的MVC配置(拦截器,格式化器,视图 控制器等)您可以添加自己的@Configuration类类型 WebMvcConfigurerAdapter,但没有 @EnableWebMvc
所以看起来包中有一个错误,因为类包含 @EnableWebMvc 注释会破坏自动配置功能。</ p>
如果没有此注释,我没有重新编译该库,因此我不能100%确定删除此标记是否可以解决此问题。我所做的是手动添加映射。
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/swagger-ui/**")
.addResourceLocations("classpath:/static/swagger-ui/");
super.addResourceHandlers(registry);
}
}