【问题标题】:Circular view path error when adding swagger-springmvc dependency in eclipse在eclipse中添加swagger-springmvc依赖时出现圆形视图路径错误
【发布时间】:2014-07-31 08:48:21
【问题描述】:

我有一个使用 spring (ver 4.0.1) REST 构建的 Web 服务应用程序。我为不同的资源创建了不同的项目,比如 A & B 和一个常见的动态 Web 项目 C。我使用 gradle 作为构建工具。项目 A 和 B 被定义为项目 C 中的依赖项。我已经为 REST API 文档集成了 swagger-springmvc:0.8.5。我正在使用基于 Java 的 spring 配置,我的 spring & swagger 配置文件是项目 C 的一部分。

当我仅在项目 C 中添加 swagger-springmvc 依赖项时,它通过 eclipse 构建并正常工作(我通过 eclipse 运行 tomcat)。我可以查看项目 A 和 B 中所有资源的 REST API 文档。

但是,如果我在项目 A 或 B 中的任何一个中添加 swagger-springmvc 依赖项(以在我的资源或模型类上添加文档),它构建得很好,但是当 tomcat 通过 eclipse 运行时会出现循环路径错误。

如果我想访问我的资源'/authenticate'('/authenticate'返回json类型对象),以下是错误:

avax.servlet.ServletException: Circular view path [authenticate]: would dispatch back to the current handler URL** [/cloudservice/authenticate] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:292)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:214)
...

但是对资源“/api-docs”的调用工作正常,我可以看到资源列表。

需要注意的是,如果我从命令行使用 gradle build 构建我的应用程序并将 war 文件复制到 tomcat 目录中,则一切正常。

我使用的是 JDK 1.7。设置也是eclipse使用JDK 1.7。

我已在我的 webapp 配置文件中添加了所需的注释:

@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan("package")
@Profile
public class WebAppConfig extends WebMvcConfigureAdapter {
    public void addInterceptors... {
    }
}

以下是swagger配置文件:

@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan("package")
@Profile
public class SwaggerConfig {

    @Bean
    public SwaggerSpringMvcPlugin customImplementation() {
        return new SwaggerSpringMvcPlugin(springSwaggerConfig);
    }
}

在gradle构建文件中添加Swagger依赖:

dependencies {
    compile "com.mangofactory:swagger-springmvc:0.8.5"
}

以下是资源'/authenticate'的控制器类代码:

@RestController
@Api(value = "authenticate", description = "authenticate")
public class AuthenticationResource {

    @RequestMapping(value = "/authenticate", method = RequestMethod.POST)
    public MyObj authenticateUser(@RequestHeader(value="Authorization") String authString {
        ....
        ....
    }
}

即使我从资源类中删除 @Api 注释但在 gradle 构建文件中添加了 swagger-springmvc 依赖项,也会出现问题。

【问题讨论】:

    标签: eclipse spring swagger


    【解决方案1】:

    从其他论坛获得解决方案。在这里分享,以防有人遇到同样的问题。

    在我的 Eclipse 项目 A 和 B(资源和模型类)中,我只是使用了 swagger 注释。所以,我只需要添加对 swagger-annotations 的依赖,而不是其他 swagger jar。我删除了对 swagger-springmvc 的依赖(反过来又依赖于其他 jar)并添加了 swagger-annotations。

    dependencies {
        compile "com.wordnik:swagger-annotations:1.3.5"
    }
    

    这解决了问题。

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多