java110
2022-09-19 cd8657e2dcffe17efd02cd055f8e6dfd6d703c96
java110-doc/src/main/java/com/java110/doc/controller/DocController.java
@@ -3,18 +3,21 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.doc.annotation.*;
import com.java110.doc.entity.ApiDocDto;
import com.java110.doc.entity.CmdDocDto;
import com.java110.doc.entity.RequestMappingsDocDto;
import com.java110.doc.registrar.ApiDocCmdPublishing;
import com.java110.doc.registrar.ApiDocPublishing;
import com.java110.utils.factory.ApplicationContextFactory;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.lang.annotation.Annotation;
import java.util.List;
@RestController
@@ -82,10 +85,140 @@
        return new ResponseEntity<>(JSONArray.toJSONString(cmdDocDtos), HttpStatus.OK);
    }
    @RequestMapping(path = "/api/pageContent", method = RequestMethod.GET)
    public ResponseEntity<String> pageContent(
            @RequestParam("name") String name,
            @RequestParam("serviceCode") String serviceCode,
            @RequestParam("resource") String resource,
            HttpServletRequest request) {
        List<RequestMappingsDocDto> mappingsDocDtos = ApiDocPublishing.getMappingsDocDtos();
        RequestMappingsDocDto newMappingsDocDto = null;
        for (RequestMappingsDocDto mappingsDocDto : mappingsDocDtos) {
            if (mappingsDocDto.getName().equals(name)) {
                newMappingsDocDto = mappingsDocDto;
            }
        }
        if (newMappingsDocDto == null) {
            return new ResponseEntity<>("{}", HttpStatus.OK);
        }
        RestTemplate restTemplate = ApplicationContextFactory.getBean("restTemplate", RestTemplate.class);
        if ("boot".equals(newMappingsDocDto.getStartWay())) {
            restTemplate = ApplicationContextFactory.getBean("outRestTemplate", RestTemplate.class);
        }
        ResponseEntity<String> responseEntity = null;
        HttpEntity<String> httpEntity = new HttpEntity<String>("", new HttpHeaders());
        try {
            responseEntity = restTemplate.exchange(newMappingsDocDto.getUrl()+"/doc/api/"+resource+"/"+serviceCode, HttpMethod.GET, httpEntity, String.class);
        } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
            responseEntity = new ResponseEntity<String>(e.getResponseBodyAsString(), e.getStatusCode());
        } catch (Exception e) {
            responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return responseEntity;
    }
    @RequestMapping(path = "/api/{resource}/{serviceCode}", method = RequestMethod.GET)
    public ResponseEntity<String> api(@PathVariable String resource,
                                      @PathVariable String serviceCode,
                                      HttpServletRequest request) {
        return null;
        CmdDocDto cmdDocDto = ApiDocCmdPublishing.getCmdDocs(resource,serviceCode);
        if(cmdDocDto == null){
            return new ResponseEntity<>("{}", HttpStatus.OK);
        }
        JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(cmdDocDto));
        Class clazz = cmdDocDto.getCmdClass();
        doJava110ParamsDoc(clazz,param);
        doJava110ResponseDoc(param, clazz);
        doJava110ExampleDoc(param, clazz);
        return new ResponseEntity<>(param.toJSONString(), HttpStatus.OK);
    }
    private void doJava110ExampleDoc(JSONObject param, Class clazz) {
        Java110ExampleDoc java110ExampleDoc = AnnotationUtils.findAnnotation(clazz,Java110ExampleDoc.class);
        if(java110ExampleDoc == null){
            return ;
        }
        param.put("reqBody",java110ExampleDoc.reqBody());
        param.put("resBody",java110ExampleDoc.resBody());
    }
    private void doJava110ResponseDoc(JSONObject param, Class clazz) {
        Java110ResponseDoc java110ResponseDoc = AnnotationUtils.findAnnotation(clazz,Java110ResponseDoc.class);
        if(java110ResponseDoc == null){
            return ;
        }
        Java110ParamDoc[] java110ParamDocs = java110ResponseDoc.params();
        JSONArray params = new JSONArray();
        JSONObject p = null;
        for(Java110ParamDoc java110ParamDoc : java110ParamDocs){
            p = new JSONObject();
            p.put("name",java110ParamDoc.name());
            p.put("defaultValue",java110ParamDoc.defaultValue());
            p.put("remark",java110ParamDoc.remark());
            p.put("type",java110ParamDoc.type());
            p.put("length",java110ParamDoc.length());
            p.put("parentNodeName",java110ParamDoc.parentNodeName());
            params.add(p);
        }
        param.put("resParam",params);
    }
    private void doJava110ParamsDoc(Class clazz, JSONObject param) {
        Java110ParamsDoc java110ParamsDoc = AnnotationUtils.findAnnotation(clazz,Java110ParamsDoc.class);
        if(java110ParamsDoc == null){
            return ;
        }
        Java110HeaderDoc[] java110HeaderDocs = java110ParamsDoc.headers();
        JSONArray headers = new JSONArray();
        JSONObject header = null;
        for(Java110HeaderDoc java110HeaderDoc : java110HeaderDocs){
            header = new JSONObject();
            header.put("name",java110HeaderDoc.name());
            header.put("defaultValue",java110HeaderDoc.defaultValue());
            header.put("description",java110HeaderDoc.description());
            headers.add(header);
        }
        param.put("header",headers);
        Java110ParamDoc[] java110ParamDocs = java110ParamsDoc.params();
        JSONArray params = new JSONArray();
        JSONObject p = null;
        for(Java110ParamDoc java110ParamDoc : java110ParamDocs){
            p = new JSONObject();
            header.put("name",java110ParamDoc.name());
            header.put("defaultValue",java110ParamDoc.defaultValue());
            header.put("remark",java110ParamDoc.remark());
            header.put("type",java110ParamDoc.type());
            header.put("length",java110ParamDoc.length());
            header.put("parentNodeName",java110ParamDoc.parentNodeName());
            params.add(p);
        }
        param.put("reqParam",params);
    }
}