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-cloud/src/main/java/org/springblade/core/cloud/version/BladeSpringMvcContract.java |  101 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/Source/BladeX-Tool/blade-core-cloud/src/main/java/org/springblade/core/cloud/version/BladeSpringMvcContract.java b/Source/BladeX-Tool/blade-core-cloud/src/main/java/org/springblade/core/cloud/version/BladeSpringMvcContract.java
new file mode 100644
index 0000000..bc52928
--- /dev/null
+++ b/Source/BladeX-Tool/blade-core-cloud/src/main/java/org/springblade/core/cloud/version/BladeSpringMvcContract.java
@@ -0,0 +1,101 @@
+/*
+ *      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.cloud.version;
+
+import feign.MethodMetadata;
+import org.springblade.core.cloud.annotation.ApiVersion;
+import org.springblade.core.cloud.annotation.UrlVersion;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.cloud.openfeign.AnnotatedParameterProcessor;
+import org.springframework.cloud.openfeign.support.SpringMvcContract;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.core.convert.ConversionService;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * 鏀寔 blade-boot 鐨� 鐗堟湰 澶勭悊
+ *
+ * @see org.springblade.core.cloud.annotation.UrlVersion
+ * @see org.springblade.core.cloud.annotation.ApiVersion
+ * @author L.cm
+ */
+public class BladeSpringMvcContract extends SpringMvcContract {
+
+	public BladeSpringMvcContract(List<AnnotatedParameterProcessor> annotatedParameterProcessors, ConversionService conversionService) {
+		super(annotatedParameterProcessors, conversionService);
+	}
+
+	@Override
+	protected void processAnnotationOnMethod(MethodMetadata data, Annotation methodAnnotation, Method method) {
+		if (RequestMapping.class.isInstance(methodAnnotation) || methodAnnotation.annotationType().isAnnotationPresent(RequestMapping.class)) {
+			Class<?> targetType = method.getDeclaringClass();
+			// url 涓婄殑鐗堟湰锛屼紭鍏堣幏鍙栨柟娉曚笂鐨勭増鏈�
+			UrlVersion urlVersion = AnnotatedElementUtils.findMergedAnnotation(method, UrlVersion.class);
+			// 鍐嶆灏濊瘯绫讳笂鐨勭増鏈�
+			if (urlVersion == null || StringUtil.isBlank(urlVersion.value())) {
+				urlVersion = AnnotatedElementUtils.findMergedAnnotation(targetType, UrlVersion.class);
+			}
+			if (urlVersion != null && StringUtil.isNotBlank(urlVersion.value())) {
+				String versionUrl = "/" + urlVersion.value();
+				data.template().uri(versionUrl);
+			}
+
+			// 娉ㄦ剰锛氬湪鐖剁被涔嬪墠 娣诲姞 url鐗堟湰锛屽湪鐖剁被涔嬪悗锛屽鐞� Media Types 鐗堟湰
+			super.processAnnotationOnMethod(data, methodAnnotation, method);
+
+			// 澶勭悊 Media Types 鐗堟湰淇℃伅
+			ApiVersion apiVersion = AnnotatedElementUtils.findMergedAnnotation(method, ApiVersion.class);
+			// 鍐嶆灏濊瘯绫讳笂鐨勭増鏈�
+			if (apiVersion == null || StringUtil.isBlank(apiVersion.value())) {
+				apiVersion = AnnotatedElementUtils.findMergedAnnotation(targetType, ApiVersion.class);
+			}
+			if (apiVersion != null && StringUtil.isNotBlank(apiVersion.value())) {
+				BladeMediaType bladeMediaType = new BladeMediaType(apiVersion.value());
+				data.template().header(HttpHeaders.ACCEPT, bladeMediaType.toString());
+			}
+		}
+	}
+
+	/**
+	 * 鍙傝�冿細https://gist.github.com/rmfish/0ed59a9af6c05157be2a60c9acea2a10
+	 * @param annotations 娉ㄨВ
+	 * @param paramIndex 鍙傛暟绱㈠紩
+	 * @return 鏄惁 http 娉ㄨВ
+	 */
+	@Override
+	protected boolean processAnnotationsOnParameter(MethodMetadata data, Annotation[] annotations, int paramIndex) {
+		boolean httpAnnotation = super.processAnnotationsOnParameter(data, annotations, paramIndex);
+		// 鍦� springMvc 涓鏋滄槸 Get 璇锋眰涓斿弬鏁颁腑鏄璞� 娌℃湁澹版槑涓篅RequestBody 鍒欓粯璁や负 Param
+		if (!httpAnnotation && StringPool.GET.equals(data.template().method().toUpperCase())) {
+			for (Annotation parameterAnnotation : annotations) {
+				if (!(parameterAnnotation instanceof RequestBody)) {
+					return false;
+				}
+			}
+			data.queryMapIndex(paramIndex);
+			return true;
+		}
+		return httpAnnotation;
+	}
+}

--
Gitblit v1.9.3