package io.springside.springtime.swagger; import static org.springframework.http.MediaType.*; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import io.springside.springtime.springboot.SpringTimeService; import io.swagger.jaxrs.Reader; import io.swagger.jaxrs.config.ReaderConfigUtils; import io.swagger.models.Info; import io.swagger.models.Swagger; import springfox.documentation.annotations.ApiIgnore; @RestController @ApiIgnore public class SpringTimeSwaggerDocsController implements InitializingBean, ApplicationContextAware { private Swagger swagger; private ApplicationContext applicationContext; @Override public void afterPropertiesSet() throws Exception { swagger = new Swagger(); Info info = new Info(); info.setTitle("GreetingService"); swagger.setInfo(info); Map<String, Object> beans = applicationContext.getBeansWithAnnotation(SpringTimeService.class); Set<Class<?>> classes = new HashSet<Class<?>>(); for (Object bean : beans.values()) { classes.add(bean.getClass()); } Reader reader = new Reader(swagger, ReaderConfigUtils.getReaderConfig(null)); swagger = reader.read(classes); } @RequestMapping(value = "/v2/rfc-api-docs", method = RequestMethod.GET, produces = { APPLICATION_JSON_VALUE }) public @ResponseBody Swagger getDocumentation(HttpServletRequest servletRequest) { return swagger; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }