SwaggerProvider.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package org.ssssssss.magicapi.swagger;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import org.springframework.web.bind.annotation.ResponseBody;
  4. import org.ssssssss.magicapi.config.ApiInfo;
  5. import org.ssssssss.magicapi.config.MappingHandlerMapping;
  6. import java.io.IOException;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Objects;
  10. import java.util.Set;
  11. public class SwaggerProvider {
  12. private MappingHandlerMapping mappingHandlerMapping;
  13. private String description;
  14. private String title;
  15. private String version;
  16. public void setMappingHandlerMapping(MappingHandlerMapping mappingHandlerMapping) {
  17. this.mappingHandlerMapping = mappingHandlerMapping;
  18. }
  19. public void setDescription(String description) {
  20. this.description = description;
  21. }
  22. public void setTitle(String title) {
  23. this.title = title;
  24. }
  25. public void setVersion(String version) {
  26. this.version = version;
  27. }
  28. @ResponseBody
  29. public SwaggerEntity swaggerJson(){
  30. List<ApiInfo> infos = mappingHandlerMapping.getApiInfos();
  31. SwaggerEntity swaggerEntity = new SwaggerEntity();
  32. SwaggerEntity.License license = new SwaggerEntity.License("MIT", "https://gitee.com/ssssssss-team/magic-api/blob/master/LICENSE");
  33. swaggerEntity.setInfo(new SwaggerEntity.Info(this.description, this.version, this.title, license));
  34. ObjectMapper mapper = new ObjectMapper();
  35. for (ApiInfo info : infos) {
  36. swaggerEntity.addTag(info.getGroupName(),info.getGroupPrefix());
  37. SwaggerEntity.Path path = new SwaggerEntity.Path();
  38. path.addTag(info.getGroupName());
  39. try {
  40. path.addResponse("200",mapper.readValue(Objects.toString(info.getOutput(),"{}"),Object.class));
  41. } catch (IOException ignored) {
  42. }
  43. path.addConsume("*/*");
  44. path.addProduce("application/json");
  45. path.setSummary(info.getName());
  46. try {
  47. Map map = mapper.readValue(Objects.toString(info.getParameter(),"{}"),Map.class);
  48. Object request = map.get("request");
  49. if(request instanceof Map){
  50. Map requestMap = (Map) request;
  51. Set keys = requestMap.keySet();
  52. for (Object key : keys) {
  53. path.addParameter(new SwaggerEntity.Parameter(key.toString(),"query","string", requestMap.getOrDefault(key,"")));
  54. }
  55. }
  56. Object header = map.get("header");
  57. if(header instanceof Map){
  58. Map headers = (Map) header;
  59. Set keys = headers.keySet();
  60. for (Object key : keys) {
  61. path.addParameter(new SwaggerEntity.Parameter(key.toString(),"header","string", headers.getOrDefault(key,"")));
  62. }
  63. }
  64. if(map.containsKey("body")){
  65. path.addParameter(new SwaggerEntity.Parameter("body","body",null,map.get("body")));
  66. }
  67. } catch (IOException ignored) {
  68. }
  69. swaggerEntity.addPath(mappingHandlerMapping.getRequestPath(info.getGroupPrefix(),info.getPath()),info.getMethod(),path);
  70. }
  71. return swaggerEntity;
  72. }
  73. }