From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001 From: 田源 <tianyuan@vci-tech.com> Date: 星期四, 03 四月 2025 14:35:02 +0800 Subject: [PATCH] 添加非密字段显示 --- Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java | 130 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 130 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java new file mode 100644 index 0000000..27a8096 --- /dev/null +++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2018-2028, DreamLu All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com) + */ +package org.springblade.core.tool.utils; + +import org.springframework.core.BridgeMethodResolver; +import org.springframework.core.DefaultParameterNameDiscoverer; +import org.springframework.core.MethodParameter; +import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.core.annotation.AnnotatedElementUtils; +import org.springframework.core.annotation.SynthesizingMethodParameter; +import org.springframework.web.method.HandlerMethod; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + +/** + * 绫绘搷浣滃伐鍏� + * + * @author L.cm + */ +public class ClassUtil extends org.springframework.util.ClassUtils { + + private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer(); + + /** + * 鑾峰彇鏂规硶鍙傛暟淇℃伅 + * + * @param constructor 鏋勯�犲櫒 + * @param parameterIndex 鍙傛暟搴忓彿 + * @return {MethodParameter} + */ + public static MethodParameter getMethodParameter(Constructor<?> constructor, int parameterIndex) { + MethodParameter methodParameter = new SynthesizingMethodParameter(constructor, parameterIndex); + methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER); + return methodParameter; + } + + /** + * 鑾峰彇鏂规硶鍙傛暟淇℃伅 + * + * @param method 鏂规硶 + * @param parameterIndex 鍙傛暟搴忓彿 + * @return {MethodParameter} + */ + public static MethodParameter getMethodParameter(Method method, int parameterIndex) { + MethodParameter methodParameter = new SynthesizingMethodParameter(method, parameterIndex); + methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER); + return methodParameter; + } + + /** + * 鑾峰彇Annotation + * + * @param method Method + * @param annotationType 娉ㄨВ绫� + * @param <A> 娉涘瀷鏍囪 + * @return {Annotation} + */ + public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationType) { + Class<?> targetClass = method.getDeclaringClass(); + // The method may be on an interface, but we need attributes from the target class. + // If the target class is null, the method will be unchanged. + Method specificMethod = ClassUtil.getMostSpecificMethod(method, targetClass); + // If we are dealing with method with generic parameters, find the original method. + specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod); + // 鍏堟壘鏂规硶锛屽啀鎵炬柟娉曚笂鐨勭被 + A annotation = AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType); + ; + if (null != annotation) { + return annotation; + } + // 鑾峰彇绫讳笂闈㈢殑Annotation锛屽彲鑳藉寘鍚粍鍚堟敞瑙o紝鏁呴噰鐢╯pring鐨勫伐鍏风被 + return AnnotatedElementUtils.findMergedAnnotation(specificMethod.getDeclaringClass(), annotationType); + } + + /** + * 鑾峰彇Annotation + * + * @param handlerMethod HandlerMethod + * @param annotationType 娉ㄨВ绫� + * @param <A> 娉涘瀷鏍囪 + * @return {Annotation} + */ + public static <A extends Annotation> A getAnnotation(HandlerMethod handlerMethod, Class<A> annotationType) { + // 鍏堟壘鏂规硶锛屽啀鎵炬柟娉曚笂鐨勭被 + A annotation = handlerMethod.getMethodAnnotation(annotationType); + if (null != annotation) { + return annotation; + } + // 鑾峰彇绫讳笂闈㈢殑Annotation锛屽彲鑳藉寘鍚粍鍚堟敞瑙o紝鏁呴噰鐢╯pring鐨勫伐鍏风被 + Class<?> beanType = handlerMethod.getBeanType(); + return AnnotatedElementUtils.findMergedAnnotation(beanType, annotationType); + } + + + /** + * 鍒ゆ柇鏄惁鏈夋敞瑙� Annotation + * + * @param method Method + * @param annotationType 娉ㄨВ绫� + * @param <A> 娉涘瀷鏍囪 + * @return {boolean} + */ + public static <A extends Annotation> boolean isAnnotated(Method method, Class<A> annotationType) { + // 鍏堟壘鏂规硶锛屽啀鎵炬柟娉曚笂鐨勭被 + boolean isMethodAnnotated = AnnotatedElementUtils.isAnnotated(method, annotationType); + if (isMethodAnnotated) { + return true; + } + // 鑾峰彇绫讳笂闈㈢殑Annotation锛屽彲鑳藉寘鍚粍鍚堟敞瑙o紝鏁呴噰鐢╯pring鐨勫伐鍏风被 + Class<?> targetClass = method.getDeclaringClass(); + return AnnotatedElementUtils.isAnnotated(targetClass, annotationType); + } + +} -- Gitblit v1.9.3