我有一个使用spring(ver 4.0.1)REST构建的Web服务应用程序。我为不同的资源创建了不同的项目,比如A& B和一个常见的动态Web项目C.我使用gradle作为构建工具。项目A& B被定义为项目C中的依赖项。我已经集成了swagger-springmvc:0.8.5用于REST API文档。我正在使用基于Java的弹簧配置和我的弹簧和弹簧。 swagger配置文件是项目C的一部分。
当我只在项目C中添加swagger-springmvc依赖时,它通过eclipse构建并正常工作(我通过eclipse运行tomcat)。我可以看到我的REST API文档,用于项目A&的所有资源。乙
但是,如果我在任何项目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依赖项,也会出现问题。
答案 0 :(得分:0)
从其他论坛获得解决方案。如果有人遇到同样的问题,请在这里分享。
在我的日食项目A& B(资源和模型类),我只是使用swagger注释。所以,我只需要添加对swagger-annotations的依赖,而不是其他招摇罐。我删除了对swagger-springmvc的依赖(反过来依赖于其他jar)并添加了swagger-annotations。
dependencies {
compile "com.wordnik:swagger-annotations:1.3.5"
}
这解决了这个问题。