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