package org.jsondoc.springmvc.controller; import java.util.List; import org.jsondoc.core.pojo.JSONDoc; import org.jsondoc.core.pojo.JSONDoc.MethodDisplay; import org.jsondoc.core.scanner.JSONDocScanner; import org.jsondoc.springmvc.scanner.Spring3JSONDocScanner; import org.jsondoc.springmvc.scanner.Spring4JSONDocScanner; import org.springframework.core.SpringVersion; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class JSONDocController { private String version; private String basePath; private List<String> packages; private JSONDocScanner jsondocScanner; private boolean playgroundEnabled = true; private MethodDisplay displayMethodAs = MethodDisplay.URI; public final static String JSONDOC_DEFAULT_PATH = "/jsondoc"; private final static Integer SPRING_VERSION_3_X = 3; public JSONDocController(String version, String basePath, List<String> packages) { this.version = version; this.basePath = basePath; this.packages = packages; String springVersion = SpringVersion.getVersion(); if(springVersion != null && !springVersion.isEmpty()) { Integer majorSpringVersion = Integer.parseInt(springVersion.split("\\.")[0]); if(majorSpringVersion > SPRING_VERSION_3_X) { this.jsondocScanner = new Spring4JSONDocScanner(); } else { this.jsondocScanner = new Spring3JSONDocScanner(); } } else { try { Class.forName("org.springframework.web.bind.annotation.RestController"); this.jsondocScanner = new Spring4JSONDocScanner(); } catch (ClassNotFoundException e) { this.jsondocScanner = new Spring3JSONDocScanner(); } } } public boolean isPlaygroundEnabled() { return playgroundEnabled; } public void setPlaygroundEnabled(boolean playgroundEnabled) { this.playgroundEnabled = playgroundEnabled; } public MethodDisplay getDisplayMethodAs() { return displayMethodAs; } public void setDisplayMethodAs(MethodDisplay displayMethodAs) { this.displayMethodAs = displayMethodAs; } @RequestMapping(value = JSONDocController.JSONDOC_DEFAULT_PATH, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody JSONDoc getApi() { return jsondocScanner.getJSONDoc(version, basePath, packages, playgroundEnabled, displayMethodAs); } }