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/BladeRequestMappingHandlerMapping.java |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/Source/BladeX-Tool/blade-core-cloud/src/main/java/org/springblade/core/cloud/version/BladeRequestMappingHandlerMapping.java b/Source/BladeX-Tool/blade-core-cloud/src/main/java/org/springblade/core/cloud/version/BladeRequestMappingHandlerMapping.java
new file mode 100644
index 0000000..c88c3a3
--- /dev/null
+++ b/Source/BladeX-Tool/blade-core-cloud/src/main/java/org/springblade/core/cloud/version/BladeRequestMappingHandlerMapping.java
@@ -0,0 +1,104 @@
+/*
+ *      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 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.core.annotation.AnnotatedElementUtils;
+import org.springframework.lang.Nullable;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * url鐗堟湰鍙峰鐞� 鍜� header 鐗堟湰澶勭悊
+ *
+ * <p>
+ *     url: /v1/user/{id}
+ *     header: Accept application/vnd.blade.VERSION+json
+ * </p>
+ *
+ * 娉ㄦ剰锛歝 浠h〃瀹㈡埛绔増鏈�
+ *
+ * @author L.cm
+ */
+public class BladeRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
+
+	@Nullable
+	@Override
+	protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
+		RequestMappingInfo mappinginfo = super.getMappingForMethod(method, handlerType);
+		if (mappinginfo != null) {
+			RequestMappingInfo apiVersionMappingInfo = getApiVersionMappingInfo(method, handlerType);
+			return apiVersionMappingInfo == null ? mappinginfo : apiVersionMappingInfo.combine(mappinginfo);
+		}
+		return null;
+	}
+
+	@Nullable
+	private RequestMappingInfo getApiVersionMappingInfo(Method method, Class<?> handlerType) {
+		// url 涓婄殑鐗堟湰锛屼紭鍏堣幏鍙栨柟娉曚笂鐨勭増鏈�
+		UrlVersion urlVersion = AnnotatedElementUtils.findMergedAnnotation(method, UrlVersion.class);
+		// 鍐嶆灏濊瘯绫讳笂鐨勭増鏈�
+		if (urlVersion == null || StringUtil.isBlank(urlVersion.value())) {
+			urlVersion = AnnotatedElementUtils.findMergedAnnotation(handlerType, UrlVersion.class);
+		}
+		// Media Types 鐗堟湰淇℃伅
+		ApiVersion apiVersion = AnnotatedElementUtils.findMergedAnnotation(method, ApiVersion.class);
+		// 鍐嶆灏濊瘯绫讳笂鐨勭増鏈�
+		if (apiVersion == null || StringUtil.isBlank(apiVersion.value())) {
+			apiVersion = AnnotatedElementUtils.findMergedAnnotation(handlerType, ApiVersion.class);
+		}
+		boolean nonUrlVersion = urlVersion == null || StringUtil.isBlank(urlVersion.value());
+		boolean nonApiVersion = apiVersion == null || StringUtil.isBlank(apiVersion.value());
+		// 鍏堝垽鏂悓鏃朵笉绾湪
+		if (nonUrlVersion && nonApiVersion) {
+			return null;
+		}
+		// 濡傛灉 header 鐗堟湰涓嶅瓨鍦�
+		RequestMappingInfo.Builder mappingInfoBuilder = null;
+		if (nonApiVersion) {
+			mappingInfoBuilder = RequestMappingInfo.paths(urlVersion.value());
+		} else {
+			mappingInfoBuilder = RequestMappingInfo.paths(StringPool.EMPTY);
+		}
+		// 濡傛灉url鐗堟湰涓嶅瓨鍦�
+		if (nonUrlVersion) {
+			String vsersionMediaTypes = new BladeMediaType(apiVersion.value()).toString();
+			mappingInfoBuilder.produces(vsersionMediaTypes);
+		}
+		return mappingInfoBuilder.build();
+	}
+
+	@Override
+	protected void handlerMethodsInitialized(Map<RequestMappingInfo, HandlerMethod> handlerMethods) {
+		// 鎵撳嵃璺敱淇℃伅 spring boot 2.1 鍘绘帀浜嗚繖涓� 鏃ュ織鐨勬墦鍗�
+		if (logger.isInfoEnabled()) {
+			for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : handlerMethods.entrySet()) {
+				RequestMappingInfo mapping = entry.getKey();
+				HandlerMethod handlerMethod = entry.getValue();
+				logger.info("Mapped \"" + mapping + "\" onto " + handlerMethod);
+			}
+		}
+		super.handlerMethodsInitialized(handlerMethods);
+	}
+}

--
Gitblit v1.9.3