但這種方法會讓 Server 浪費資源,也有漏洞的風險
Swagger高危漏洞,影響Html、PHP、Java和 Ruby等開發應用
原文網址:https://read01.com/Lz7eJg.html
最近終於找到能獨立產出 swagger.json 的方式,程式碼如下
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package test; | |
import java.io.File; | |
import java.io.FileNotFoundException; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.util.HashSet; | |
import java.util.Set; | |
import javax.ws.rs.Path; | |
import org.reflections.Reflections; | |
import com.fasterxml.jackson.core.JsonProcessingException; | |
import io.swagger.jaxrs.Reader; | |
import io.swagger.jaxrs.config.DefaultReaderConfig; | |
import io.swagger.models.Contact; | |
import io.swagger.models.Info; | |
import io.swagger.models.License; | |
import io.swagger.models.Scheme; | |
import io.swagger.models.Swagger; | |
import io.swagger.util.Json; | |
import io.swagger.util.Yaml; | |
public class TestSwagger { | |
public static void main(String[] args) { | |
String RESOURCE_PACKAGE = "com.abc.api.rest"; | |
Set<Class<?>> classes = new HashSet<Class<?>>(); | |
new Reflections(RESOURCE_PACKAGE).getTypesAnnotatedWith(Path.class).forEach(classes::add); | |
classes.add(io.swagger.jaxrs.listing.ApiListingResource.class); | |
classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class); | |
DefaultReaderConfig config = new DefaultReaderConfig(); | |
config.setScanAllResources(true); | |
Swagger baseSwagger = new Swagger(); | |
baseSwagger.addScheme(Scheme.HTTPS); | |
baseSwagger.setHost("api.abc.com"); | |
baseSwagger.setBasePath("/api"); | |
Info api_info = new Info(); | |
api_info.setTitle("Some API"); | |
api_info.setDescription("Access Data"); | |
api_info.setTermsOfService("None"); | |
Contact contact = new Contact(); | |
contact.setName("admin"); | |
contact.setEmail("admin@xxx.com"); | |
contact.setUrl(""); | |
api_info.setContact(contact); | |
License license = new License(); | |
license.name("None"); | |
api_info.setLicense(license); | |
api_info.setVersion("1.0.0"); | |
baseSwagger.setInfo(api_info); | |
try { | |
Swagger swagger = new Reader(baseSwagger, config).read(classes); | |
File json_file = new File("./build/doc/swagger.json"); | |
File yaml_file = new File("./build/doc/swagger.yaml"); | |
File file_dir = new File("./build/doc"); | |
if(!file_dir.exists()){ | |
file_dir.mkdirs(); | |
} | |
Json.mapper().writeValue(new FileOutputStream(json_file), swagger); | |
Yaml.mapper().writeValue(new FileOutputStream(yaml_file), swagger); | |
/* | |
String json = Json.mapper().writeValueAsString(swagger); | |
String yaml = Yaml.mapper().writeValueAsString(swagger); | |
System.out.println(yaml); | |
*/ | |
} catch (JsonProcessingException e) { | |
e.printStackTrace(); | |
} catch (FileNotFoundException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
} | |
} |