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