diff --git a/src/main/java/com/apidoc/common/Const.java b/src/main/java/com/apidoc/common/Const.java index a728bbdcec4a74c0c7ee1f99eab2ddc4ad123960..3ca0771d0f7b4d9ed3fac0335e72b164b913bbee 100644 --- a/src/main/java/com/apidoc/common/Const.java +++ b/src/main/java/com/apidoc/common/Const.java @@ -11,8 +11,11 @@ public class Const { public static String projectJava;//项目代码地址 static { - path = new File("").getAbsolutePath() + File.separator; -// System.out.println(path); + + path = Thread.currentThread().getContextClassLoader().getResource("").getPath(); + if (path.endsWith("target/classes/")){ + path = new File(path).getParentFile().getParent() + File.separator; + } apidocPath = path + "data" + File.separator; projectJava = path + "src" + File.separator + "main" + File.separator + "java" + File.separator; } diff --git a/src/main/java/com/apidoc/utis/SpringUtil.java b/src/main/java/com/apidoc/utis/SpringUtil.java index 834b704bcf0e960bbc296290d91809c261148386..9d07f000337a4d6e376728f2aa31784bd94e2abd 100644 --- a/src/main/java/com/apidoc/utis/SpringUtil.java +++ b/src/main/java/com/apidoc/utis/SpringUtil.java @@ -2,7 +2,11 @@ package com.apidoc.utis; import org.springframework.web.bind.annotation.*; +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; /** * @Description: SpringBoot 相关工具类 @@ -12,166 +16,41 @@ import java.lang.reflect.Method; public class SpringUtil { /** - * 解析SpringBoot的路由注解 得到路由映射mapping - * 解析以下注解 - * - * @param claszz 类 - * @see RequestMapping - * @see GetMapping - * @see PostMapping - * @see PutMapping - * @see DeleteMapping - * @see PatchMapping - * 查看spring源码可以看到,RequestMapping中有多个同等意义的属性,这里分别处理 - * value name path + * 需要解析的SpringBoot 路由注解列表 */ - public static String getMapping(Class claszz) { - RequestMapping requestMapping = (RequestMapping) claszz.getAnnotation(RequestMapping.class); - if (requestMapping != null) { - // - if (StringUtil.isNotEmpty(requestMapping.value())) { - return requestMapping.value()[0]; - } - if (StringUtil.isNotEmpty(requestMapping.name())) { - return requestMapping.name(); - } - if (StringUtil.isNotEmpty(requestMapping.path())) { - return requestMapping.path()[0]; - } - } - - GetMapping getMapping = (GetMapping) claszz.getAnnotation(GetMapping.class); - if (getMapping != null) { - if (StringUtil.isNotEmpty(getMapping.value())) { - return getMapping.value()[0]; - } - if (StringUtil.isNotEmpty(getMapping.name())) { - return getMapping.name(); - } - if (StringUtil.isNotEmpty(getMapping.path())) { - return getMapping.path()[0]; - } - } - - PostMapping postMapping = (PostMapping) claszz.getAnnotation(PostMapping.class); - if (postMapping != null) { - if (StringUtil.isNotEmpty(postMapping.value())) { - return postMapping.value()[0]; - } - if (StringUtil.isNotEmpty(postMapping.name())) { - return postMapping.name(); - } - if (StringUtil.isNotEmpty(postMapping.path())) { - return postMapping.path()[0]; - } - } - - PutMapping putMapping = (PutMapping) claszz.getAnnotation(PutMapping.class); - if (putMapping != null) { - if (StringUtil.isNotEmpty(putMapping.value())) { - return putMapping.value()[0]; - } - if (StringUtil.isNotEmpty(putMapping.name())) { - return putMapping.name(); - } - if (StringUtil.isNotEmpty(putMapping.path())) { - return putMapping.path()[0]; - } - } - - DeleteMapping deleteMapping = (DeleteMapping) claszz.getAnnotation(DeleteMapping.class); - if (deleteMapping != null) { - if (StringUtil.isNotEmpty(deleteMapping.value())) { - return deleteMapping.value()[0]; - } - if (StringUtil.isNotEmpty(deleteMapping.name())) { - return deleteMapping.name(); - } - if (StringUtil.isNotEmpty(deleteMapping.path())) { - return deleteMapping.path()[0]; - } - } - return null; - } + private static List> MAPPINT_LIST = + Arrays.asList(RequestMapping.class, GetMapping.class, PostMapping.class, + PutMapping.class, DeleteMapping.class, PatchMapping.class); /** * 解析SpringBoot的路由注解 得到路由映射mapping - * 解析以下注解 - * - * @param method 方法 - * @see RequestMapping - * @see GetMapping - * @see PostMapping - * @see PutMapping - * @see DeleteMapping - * @see PatchMapping - * 查看spring源码可以看到,RequestMapping中有多个同等意义的属性,这里分别处理 - * value name path + * @param o + * 待解析的Controller类或方法 + * @return */ - public static String getMapping(Method method) { - RequestMapping requestMapping = (RequestMapping) method.getAnnotation(RequestMapping.class); - if (requestMapping != null) { - // - if (StringUtil.isNotEmpty(requestMapping.value())) { - return requestMapping.value()[0]; - } - if (StringUtil.isNotEmpty(requestMapping.name())) { - return requestMapping.name(); - } - if (StringUtil.isNotEmpty(requestMapping.path())) { - return requestMapping.path()[0]; - } - } + public static String getMapping(T o) { - GetMapping getMapping = (GetMapping) method.getAnnotation(GetMapping.class); - if (getMapping != null) { - if (StringUtil.isNotEmpty(getMapping.value())) { - return getMapping.value()[0]; + for (Class annotation: MAPPINT_LIST){ + Annotation mapping = null; + if (o instanceof Method){ + mapping = ((Method) o).getAnnotation(annotation); + }else{ + mapping = ((Class) o).getAnnotation(annotation); } - if (StringUtil.isNotEmpty(getMapping.name())) { - return getMapping.name(); + if (null == mapping){ + continue; } - if (StringUtil.isNotEmpty(getMapping.path())) { - return getMapping.path()[0]; - } - } - PostMapping postMapping = (PostMapping) method.getAnnotation(PostMapping.class); - if (postMapping != null) { - if (StringUtil.isNotEmpty(postMapping.value())) { - return postMapping.value()[0]; - } - if (StringUtil.isNotEmpty(postMapping.name())) { - return postMapping.name(); - } - if (StringUtil.isNotEmpty(postMapping.path())) { - return postMapping.path()[0]; - } - } - - PutMapping putMapping = (PutMapping) method.getAnnotation(PutMapping.class); - if (putMapping != null) { - if (StringUtil.isNotEmpty(putMapping.value())) { - return putMapping.value()[0]; + // 取值 + String value = getMappingAttr(mapping, "value"); + if (null == value){ + value = getMappingAttr(mapping, "name"); } - if (StringUtil.isNotEmpty(putMapping.name())) { - return putMapping.name(); + if (null == value){ + value = getMappingAttr(mapping, "path"); } - if (StringUtil.isNotEmpty(putMapping.path())) { - return putMapping.path()[0]; - } - } - - DeleteMapping deleteMapping = (DeleteMapping) method.getAnnotation(DeleteMapping.class); - if (deleteMapping != null) { - if (StringUtil.isNotEmpty(deleteMapping.value())) { - return deleteMapping.value()[0]; - } - if (StringUtil.isNotEmpty(deleteMapping.name())) { - return deleteMapping.name(); - } - if (StringUtil.isNotEmpty(deleteMapping.path())) { - return deleteMapping.path()[0]; + if (null != value){ + return parseMapping(value); } } return null; @@ -218,4 +97,43 @@ public class SpringUtil { } + /** + * 标准化Mapping短 + * @param mapping + * mapping路径映射文本 + * @return + */ + private static String parseMapping(String mapping){ + if (!mapping.startsWith("/")){ + mapping = "/" + mapping; + } + if (mapping.endsWith("/")){ + mapping = mapping.substring(0, mapping.length() - 1); + } + return mapping; + } + + /** + * 获取Mapping注解的属性 + * @param mapping + * Mapping注解 + * @param attr + * 属性字段 + * @return + */ + private static String getMappingAttr(Annotation mapping, String attr){ + try { + Object invoke = mapping.getClass().getMethod(attr).invoke(mapping); + if (null == invoke){ + return null; + } + if (invoke instanceof String[]){ + return ((String[]) invoke)[0]; + } + return invoke.toString(); + } catch (IllegalAccessException|InvocationTargetException|NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + }