From 4da3c82895e62fce55145be1164f42d89b532542 Mon Sep 17 00:00:00 2001 From: wjm0729 Date: Thu, 31 Dec 2020 15:50:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20FileTypeEnum=20=E5=8F=96?= =?UTF-8?q?=E5=80=BC=E9=80=BB=E8=BE=91,=20=E9=81=BF=E5=85=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=BC=82=E5=B8=B8=E5=BD=93=E4=BD=9C=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=88=86=E6=94=AF=20(#4607)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 优化 FileTypeEnum 取值逻辑, 避免使用异常当作逻辑分支 异常的代价是很大的, 非必要情况下. 应该尽量避免 * comment * comment * license --- .../server/controller/ConfigServletInner.java | 11 +--- .../config/server/enums/FileTypeEnum.java | 21 +++++++ .../EmbeddedStoragePersistServiceImpl.java | 16 ++--- .../ExternalStoragePersistServiceImpl.java | 10 +-- .../test/common/FileTypeEnum_ITCase.java | 62 +++++++++++++++++++ 5 files changed, 94 insertions(+), 26 deletions(-) create mode 100644 test/src/test/java/com/alibaba/nacos/test/common/FileTypeEnum_ITCase.java diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java index 65424b4e3f3..b7cc2da2e6f 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigServletInner.java @@ -139,17 +139,12 @@ public String doGetConfig(HttpServletRequest request, HttpServletResponse respon isBeta = true; } } - + final String configType = (null != cacheItem.getType()) ? cacheItem.getType() : FileTypeEnum.TEXT.getFileType(); response.setHeader("Config-Type", configType); - - String contentTypeHeader; - try { - contentTypeHeader = FileTypeEnum.valueOf(configType.toUpperCase()).getContentType(); - } catch (IllegalArgumentException ex) { - contentTypeHeader = FileTypeEnum.TEXT.getContentType(); - } + FileTypeEnum fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(configType); + String contentTypeHeader = fileTypeEnum.getContentType(); response.setHeader(HttpHeaderConsts.CONTENT_TYPE, contentTypeHeader); } File file = null; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/enums/FileTypeEnum.java b/config/src/main/java/com/alibaba/nacos/config/server/enums/FileTypeEnum.java index 293d052da46..42e56352721 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/enums/FileTypeEnum.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/enums/FileTypeEnum.java @@ -17,6 +17,7 @@ package com.alibaba.nacos.config.server.enums; import com.alibaba.nacos.common.http.param.MediaType; +import com.alibaba.nacos.common.utils.StringUtils; /** * Config file type enum. @@ -98,4 +99,24 @@ public String getFileType() { public String getContentType() { return contentType; } + + /** + * Get the corresponding FileTypeEnum by file extension or fileType. If not found FileTypeEnum.TEXT is returned + * + * @param extOrFileType file extension or fileType + * @return + */ + public static FileTypeEnum getFileTypeEnumByFileExtensionOrFileType(String extOrFileType) { + if (StringUtils.isNotBlank(extOrFileType)) { + String upperExtName = extOrFileType.trim().toUpperCase(); + for (FileTypeEnum value : VALUES) { + if (value.name().equals(upperExtName)) { + return value; + } + } + } + return FileTypeEnum.TEXT; + } + + private static final FileTypeEnum[] VALUES = FileTypeEnum.values(); } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java index 6e5d2d039fd..23cc0c89fe9 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java @@ -1125,8 +1125,7 @@ public List getTenantIdList(int page, int pageSize) { Page> pageList = helper .fetchPageLimit(sql, new Object[] {from, pageSize}, page, pageSize, MAP_ROW_MAPPER); - return pageList.getPageItems().stream() - .map(map -> String.valueOf(map.get("TENANT_ID"))) + return pageList.getPageItems().stream().map(map -> String.valueOf(map.get("TENANT_ID"))) .collect(Collectors.toList()); } @@ -1139,8 +1138,7 @@ public List getGroupIdList(int page, int pageSize) { Page> pageList = helper .fetchPageLimit(sql, new Object[] {from, pageSize}, page, pageSize, MAP_ROW_MAPPER); - return pageList.getPageItems().stream() - .map(map -> String.valueOf(map.get("GROUP_ID"))) + return pageList.getPageItems().stream().map(map -> String.valueOf(map.get("GROUP_ID"))) .collect(Collectors.toList()); } @@ -2344,13 +2342,9 @@ public Map batchInsertOrUpdate(List configInfoLis if (StringUtils.isBlank(type)) { // simple judgment of file type based on suffix if (configInfo.getDataId().contains(SPOT)) { - String extName = configInfo.getDataId().substring(configInfo.getDataId().lastIndexOf(SPOT) + 1) - .toUpperCase(); - try { - type = FileTypeEnum.valueOf(extName.toUpperCase()).getFileType(); - } catch (Throwable ex) { - type = FileTypeEnum.TEXT.getFileType(); - } + String extName = configInfo.getDataId().substring(configInfo.getDataId().lastIndexOf(SPOT) + 1); + FileTypeEnum fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(extName); + type = fileTypeEnum.getFileType(); } } if (configAdvanceInfo == null) { diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java index ca7efad8e0b..017e755852e 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java @@ -2590,13 +2590,9 @@ public Map batchInsertOrUpdate(List configInfoLis if (StringUtils.isBlank(type)) { // simple judgment of file type based on suffix if (configInfo.getDataId().contains(SPOT)) { - String extName = configInfo.getDataId().substring(configInfo.getDataId().lastIndexOf(SPOT) + 1) - .toUpperCase(); - try { - type = FileTypeEnum.valueOf(extName.toUpperCase()).getFileType(); - } catch (Exception ex) { - type = FileTypeEnum.TEXT.getFileType(); - } + String extName = configInfo.getDataId().substring(configInfo.getDataId().lastIndexOf(SPOT) + 1); + FileTypeEnum fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(extName); + type = fileTypeEnum.getFileType(); } } if (configAdvanceInfo == null) { diff --git a/test/src/test/java/com/alibaba/nacos/test/common/FileTypeEnum_ITCase.java b/test/src/test/java/com/alibaba/nacos/test/common/FileTypeEnum_ITCase.java new file mode 100644 index 00000000000..f5841dfd4ae --- /dev/null +++ b/test/src/test/java/com/alibaba/nacos/test/common/FileTypeEnum_ITCase.java @@ -0,0 +1,62 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.nacos.test.common; + +import com.alibaba.nacos.config.server.enums.FileTypeEnum; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author by jiangmin.wu on 2020/12/30 + */ +public class FileTypeEnum_ITCase { + + @Test + public void fileTypeEnum_test1() { + for (FileTypeEnum value : FileTypeEnum.values()) { + FileTypeEnum fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(value.name()); + Assert.assertEquals(fileTypeEnum, value); + } + } + + @Test + public void fileTypeEnum_test2() { + for (FileTypeEnum value : FileTypeEnum.values()) { + FileTypeEnum fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(value.getFileType()); + Assert.assertNotNull(fileTypeEnum); + } + } + + @Test + public void fileTypeEnum_test3() { + FileTypeEnum fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType("t"); + Assert.assertEquals(fileTypeEnum, FileTypeEnum.TEXT); + + fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(""); + Assert.assertEquals(fileTypeEnum, FileTypeEnum.TEXT); + + fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType("."); + Assert.assertEquals(fileTypeEnum, FileTypeEnum.TEXT); + + fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType("1"); + Assert.assertEquals(fileTypeEnum, FileTypeEnum.TEXT); + + fileTypeEnum = FileTypeEnum.getFileTypeEnumByFileExtensionOrFileType(null); + Assert.assertEquals(fileTypeEnum, FileTypeEnum.TEXT); + } + +}