Spring 4 学习笔记-SpringRestFull接口整合Swagger

本项目是根据上一篇文档: 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目录下(其他目录也可以)。

152936_mXZn_2285740.png

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 得到如下所示请求接口:

154226_IA1d_2285740.png

 

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

 

转载于:https://my.oschina.net/TomXiao/blog/716664

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值