本项目是根据上一篇文档: Spring 4 学习笔记- SpringWeb MVC RestFul 项目搭建 项目基础上进行整合。其实很简单。 主要是记录配置过程中遇到的一些坑。
1. 在原有项目基础上,添加如下依赖库,及pom.xml文件中加入以下:
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.9.4</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-core_2.10</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-models</artifactId>
<version>0.9.4</version>
</dependency>
2. 添加Swagger Java类配置文件。这里有些坑, 后面介绍。
/**
* @Project Spring
* @author Xiaowentao
* @Time 2016年7月22日
*/
package tom.spring.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
//@Configuration
@EnableSwagger
@EnableWebMvc
@ComponentScan("tom.spring.controller")
public class SwaggerConfig {
@Autowired
private SpringSwaggerConfig swaggerConfig;
@Bean
public SwaggerSpringMvcPlugin customImplementation() {
SwaggerSpringMvcPlugin swaggerSpringMvcPlugin = new SwaggerSpringMvcPlugin(swaggerConfig);
swaggerSpringMvcPlugin.apiInfo(apiInfo());
swaggerSpringMvcPlugin.swaggerGroup("group");
swaggerSpringMvcPlugin.includePatterns(".*?");
return swaggerSpringMvcPlugin;
}
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo("My Apps API Title", "My Apps API Description", "My Apps API terms of service",
"My Apps API Contact Email", "My Apps API Licence Type", "My Apps API License URL");
return apiInfo;
}
public SpringSwaggerConfig getSwaggerConfig() {
return swaggerConfig;
}
public void setSwaggerConfig(SpringSwaggerConfig swaggerConfig) {
this.swaggerConfig = swaggerConfig;
}
}
注: 1. 去掉@Configure 注解,网上很多都是写的Configure注解, 但是我写怎么也调试不通过,最后在XML中配置了一个自定义Configure的Bean。否则会出现以下错误:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.mangofactory.swagger.configuration.SpringSwaggerConfig#0': Unsatisfied dependency expressed through field 'handlerMappings': No qualifying bean of type [java.util.List] found for dependency [java.util.List<org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping>]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.util.List] found for dependency [java.util.List<org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping>]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:349)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:775)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4729)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5167)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.util.List] found for dependency [java.util.List<org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping>]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1403)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1056)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1018)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)
... 24 more
3. 上一步中去掉了@Configure注解,需要再XML中配置一个Bean, 同时由于Spring中并没有配置SpringSwaggerConfig的Bean,而在自定义的Config中配置了添加自动注解赋值的,所以我们在XML配置中需要添加一个匿名Bean。Spring Bean配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<context:component-scan base-package="flare.core" />
<bean class="tom.spring.config.SwaggerConfig" />
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
</beans>
4. 下载Swagger-UI, 地址:https://github.com/swagger-api/swagger-ui 。 将dist目录下所有文件拷贝到项目目录WEB_INF目录下(其他目录也可以)。
5. 修改Swagger文件中的index.html , 将URL改为自己项目URL。 如下所示:
<script type="text/javascript">
$(function () {
var url = window.location.search.match(/url=([^&]+)/);
if (url && url.length > 1) {
url = decodeURIComponent(url[1]);
} else {
url = "http://localhost:8080/Spring/api-docs/";
}
......
6. 添加静态资源请求映射。 将以下内容添加的servlet配置文件中,其他配置与RestFul项目配置一样。
<mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/" />
7. 最后web.xml 文件配置如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Spring Learn</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/servlet/*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<description>Define Default DataSource Configure</description>
<param-name>spring.profiles.default</param-name>
<param-value>dev</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring/*.xml</param-value>
</context-param>
</web-app>
8. 修改之前的Controller, 添加API注解,如下所示:
/**
* @Project Spring
* @author Xiaowentao
* @Time 2016年7月22日
*/
/**
*
*/
package tom.spring.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* @author Xiaowentao
*
*/
@Api(value="User", description = "用户管理相关接口")
@RestController
@RequestMapping("/user")
public class UserManagerController {
@ApiOperation(value = "用户详细信息", notes = "检索用户的详细信息")
@ApiResponses({ @ApiResponse(code = 200, message = "查询成功"), @ApiResponse(code = 400, message = "查询出错") })
@RequestMapping(value="/messages", method=RequestMethod.GET)
public List<String> getMessage(){
List<String> result = new ArrayList<String>(7);
for(int i=0; i<7; i++){
result.add("Tom "+i);
}
return result;
}
@ApiOperation(value = "用户user信息", notes = "检索user的详细信息")
@ApiResponses({ @ApiResponse(code = 200, message = "查询成功"), @ApiResponse(code = 400, message = "查询出错") })
@RequestMapping(value="/user",method=RequestMethod.GET)
public String getUser(){
return "user: Tom";
}
}
注:1. 发现及时不添加这些 API注解, 最新版的Swagger 也能扫描到这个借口,并显示在接口列表中。
2. controller方法一定要注明求情类型,默认Swagger会创建6种方法映射的请求接口。
9. 访问swagger ui , 启动项目后输入以下地址: http://localhost:8080/Spring/swagger/index.html 得到如下所示请求接口:
10. Swagger UI也可以运行在nginx中,通过配置nginx代理实现。这个同一个Swagger 可以同时调用多个项目的api接口。 之后再写笔记。
11. 项目源代码和之前两个项目源代码一样,可以通过前面两个文章获取。 每个成功demo提交都有一个tag,自行切换。
12. 启动成功的log输出,一定可以看到 Swagger Listing的接口。
七月 23, 2016 3:41:23 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Spring' did not find a matching property.
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version: Apache Tomcat/8.0.26
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built: Aug 18 2015 11:38:37 UTC
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number: 8.0.26.0
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name: Windows 8.1
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version: 6.3
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture: amd64
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home: C:\Java\jdk1.7.0_79\jre
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version: 1.7.0_79-b15
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor: Oracle Corporation
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE: D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:\apache-tomcat-8
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\apache-tomcat-8
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\apache-tomcat-8\endorsed
七月 23, 2016 3:41:23 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=UTF-8
七月 23, 2016 3:41:23 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: Loaded APR based Apache Tomcat Native library 1.1.33 using APR version 1.5.1.
七月 23, 2016 3:41:23 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
七月 23, 2016 3:41:24 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL
信息: OpenSSL successfully initialized (OpenSSL 1.0.1m 19 Mar 2015)
七月 23, 2016 3:41:24 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-apr-8080"]
七月 23, 2016 3:41:24 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-apr-8009"]
七月 23, 2016 3:41:24 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 2207 ms
七月 23, 2016 3:41:24 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
七月 23, 2016 3:41:24 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/8.0.26
七月 23, 2016 3:41:25 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [258] milliseconds.
七月 23, 2016 3:41:31 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
七月 23, 2016 3:41:31 下午 org.apache.catalina.core.ApplicationContext log
信息: No Spring WebApplicationInitializer types detected on classpath
七月 23, 2016 3:41:31 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
2016-07-23 15:41:31-INFO [localhost-startStop-1] org.springframework.web.context.ContextLoader.initWebApplicationContext(305)-Root WebApplicationContext: initialization started
2016-07-23 15:41:31-INFO [localhost-startStop-1] org.springframework.context.support.AbstractApplicationContext.prepareRefresh(581)-Refreshing Root WebApplicationContext: startup date [Sat Jul 23 15:41:31 CST 2016]; root of context hierarchy
2016-07-23 15:41:31-INFO [localhost-startStop-1] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(317)-Loading XML bean definitions from file [D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\Spring\WEB-INF\classes\spring\applicationContext.xml]
2016-07-23 15:41:32-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/ || /homepage],methods=[GET]}" onto public java.lang.String tom.spring.controller.HomeController.home()
2016-07-23 15:41:32-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/user/messages],methods=[GET]}" onto public java.util.List<java.lang.String> tom.spring.controller.UserManagerController.getMessage()
2016-07-23 15:41:32-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/user/user],methods=[GET]}" onto public java.lang.String tom.spring.controller.UserManagerController.getUser()
2016-07-23 15:41:32-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/api-docs/{swaggerGroup}/{apiDeclaration}],methods=[GET]}" onto public org.springframework.http.ResponseEntity<com.mangofactory.swagger.models.dto.ApiListing> com.mangofactory.swagger.controllers.DefaultSwaggerController.getApiListing(java.lang.String,java.lang.String)
2016-07-23 15:41:32-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/api-docs],methods=[GET]}" onto public org.springframework.http.ResponseEntity<com.mangofactory.swagger.models.dto.ResourceListing> com.mangofactory.swagger.controllers.DefaultSwaggerController.getResourceListing(java.lang.String)
2016-07-23 15:41:33-INFO [localhost-startStop-1] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.initControllerAdviceCache(539)-Looking for @ControllerAdvice: Root WebApplicationContext: startup date [Sat Jul 23 15:41:31 CST 2016]; root of context hierarchy
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.plugin.SwaggerPluginAdapter.onApplicationEvent(33)-Context refreshed
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.plugin.SwaggerPluginAdapter.onApplicationEvent(46)-Found custom SwaggerSpringMvcPlugins
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.plugin.SwaggerPluginAdapter.onApplicationEvent(50)-initializing plugin bean customImplementation
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scan(55)-Scanning for api listing references
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.ClassOrApiAnnotationResourceGrouping.getResourceGroups(50)-Group for method home was home-controller
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(78)-Request mapping: home belongs to groups: [[ResourceGroup{groupName='home-controller', position=0}]]
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(82)-Adding resource to group:ResourceGroup{groupName='home-controller', position=0} with description:Home Controller for handler method:home
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.ClassOrApiAnnotationResourceGrouping.getResourceGroups(50)-Group for method getMessage was user
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(78)-Request mapping: getMessage belongs to groups: [[ResourceGroup{groupName='user', position=0}]]
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(82)-Adding resource to group:ResourceGroup{groupName='user', position=0} with description:用户管理相关接口 for handler method:getMessage
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.ClassOrApiAnnotationResourceGrouping.getResourceGroups(50)-Group for method getUser was user
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(78)-Request mapping: getUser belongs to groups: [[ResourceGroup{groupName='user', position=0}]]
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(82)-Adding resource to group:ResourceGroup{groupName='user', position=0} with description:用户管理相关接口 for handler method:getUser
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.RequestMappingEvaluator.hasIgnoredAnnotatedRequestMapping(74)-Excluding method as it contains the excluded annotation: interface com.mangofactory.swagger.annotations.ApiIgnore
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.RequestMappingEvaluator.hasIgnoredAnnotatedRequestMapping(74)-Excluding method as it contains the excluded annotation: interface com.mangofactory.swagger.annotations.ApiIgnore
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(96)-Created resource listing Path: /group/home-controller Description: home-controller Position: 0
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.scanners.ApiListingReferenceScanner.scanSpringRequestMappings(96)-Created resource listing Path: /group/user Description: user Position: 0
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.readers.operation.OperationAuthReader.execute(64)-Authorization count home for method 0
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.readers.operation.OperationAuthReader.execute(64)-Authorization count home for method 0
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.readers.operation.OperationAuthReader.execute(64)-Authorization count getMessage for method 0
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.readers.operation.OperationAuthReader.execute(64)-Authorization count getUser for method 0
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.SwaggerApiResourceListing.initialize(87)-Added a resource listing with (2) api resources:
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.SwaggerApiResourceListing.initialize(92)- Home Controller at location: /api-docs/group/home-controller
2016-07-23 15:41:34-INFO [localhost-startStop-1] com.mangofactory.swagger.core.SwaggerApiResourceListing.initialize(92)- 用户管理相关接口 at location: /api-docs/group/user
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.context.ContextLoader.initWebApplicationContext(345)-Root WebApplicationContext: initialization completed in 2913 ms
七月 23, 2016 3:41:34 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'dispatcher'
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.FrameworkServlet.initServletBean(487)-FrameworkServlet 'dispatcher': initialization started
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.context.support.AbstractApplicationContext.prepareRefresh(581)-Refreshing WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sat Jul 23 15:41:34 CST 2016]; parent: Root WebApplicationContext
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(317)-Loading XML bean definitions from file [D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\Spring\WEB-INF\classes\servlet\dispatcher-servlet.xml]
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/ || /homepage],methods=[GET]}" onto public java.lang.String tom.spring.controller.HomeController.home()
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/user/messages],methods=[GET]}" onto public java.util.List<java.lang.String> tom.spring.controller.UserManagerController.getMessage()
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MappingRegistry.register(534)-Mapped "{[/user/user],methods=[GET]}" onto public java.lang.String tom.spring.controller.UserManagerController.getUser()
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.initControllerAdviceCache(539)-Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sat Jul 23 15:41:34 CST 2016]; parent: Root WebApplicationContext
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.initControllerAdviceCache(539)-Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sat Jul 23 15:41:34 CST 2016]; parent: Root WebApplicationContext
2016-07-23 15:41:34-INFO [localhost-startStop-1] org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.registerHandler(341)-Mapped URL path [/swagger/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
2016-07-23 15:41:35-INFO [localhost-startStop-1] com.mangofactory.swagger.plugin.SwaggerPluginAdapter.onApplicationEvent(60)-Skipping SwaggerSpringMvcPlugin initialization already initialized!
2016-07-23 15:41:35-INFO [localhost-startStop-1] org.springframework.web.servlet.FrameworkServlet.initServletBean(506)-FrameworkServlet 'dispatcher': initialization completed in 867 ms
七月 23, 2016 3:41:35 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-8080"]
七月 23, 2016 3:41:35 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
七月 23, 2016 3:41:35 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 10833 ms