【发布时间】:2015-03-29 16:24:15
【问题描述】:
我正在尝试在我的项目中设置 swagger。
我有以下 SwaggerConfiguration 类:
@EnableSwagger
@Configuration
@ComponentScan(basePackages = {"my.package"})
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(
SwaggerSpringMvcUi.WEB_JAR_RESOURCE_PATTERNS)
.addResourceLocations(
SwaggerSpringMvcUi.WEB_JAR_RESOURCE_LOCATION)
.setCachePeriod(0);
}
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix(SwaggerSpringMvcUi.WEB_JAR_VIEW_RESOLVER_PREFIX);
resolver.setSuffix(SwaggerSpringMvcUi.WEB_JAR_VIEW_RESOLVER_SUFFIX);
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
很遗憾,我收到 无法从服务器读取。它可能没有适当的访问控制来源设置。
所以经过快速研究,我发现我需要添加 CORSFilter 来克服这个问题:
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
我检查了 CURL - 标头已正确修改,但 Swagger 仍然无法正常工作(与之前的错误消息相同)。
有什么想法吗?
【问题讨论】:
-
您使用 curl 测试哪个 URL?您是否尝试在修改标题后清除浏览器的缓存?您没有任何
PUT操作吗? -
我找到了一个解决方案 - 事实证明,我的 gradle 构建中缺少以下条目:runtime 'org.apache.tomcat.embed:tomcat-embed-jasper'
-
您可能希望为未来的用户提供该问题的官方答案并接受它。
标签: spring-boot swagger swagger-ui