Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: 文件分发OpenAPI接口自动去除路径参数首尾空格 #3441 #3443

Merged
merged 1 commit into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class ListUtil {

Expand Down Expand Up @@ -72,4 +73,24 @@ public static <E> List<E> union(Collection<? extends E> collection1, Collection<
return result;
}

/**
* 去除字符串列表中各元素首尾的空字符串,null元素不处理原样返回
*
* @param list 字符串列表
* @return 处理后的字符串列表
*/
public static List<String> trimStringList(List<String> list) {
if (list == null) {
return null;
}
return list.stream().map(
str -> {
if (str == null) {
return null;
} else {
return str.trim();
}
}
).collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
Expand Down Expand Up @@ -54,4 +55,17 @@ void testUnion() {
assertThat(result).containsOnly("a", "b", "c", "d");
}

@Test
void testTrimStringList() {
assertThat(ListUtil.trimStringList(null)).isNull();
assertThat(ListUtil.trimStringList(Collections.emptyList())).isNotNull();
assertThat(ListUtil.trimStringList(Collections.emptyList())).size().isEqualTo(0);

List<String> list1 = Lists.newArrayList(null, " a ", " b b ", "");
assertThat(ListUtil.trimStringList(list1)).size().isEqualTo(4);
assertThat(ListUtil.trimStringList(list1).get(0)).isNull();
assertThat(ListUtil.trimStringList(list1).get(1)).isEqualTo("a");
assertThat(ListUtil.trimStringList(list1).get(2)).isEqualTo("b b");
assertThat(ListUtil.trimStringList(list1).get(3)).isEqualTo("");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@

package com.tencent.bk.job.common.esb.model.job.v3;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.tencent.bk.job.common.util.ListUtil;
import lombok.Data;

import java.util.List;
Expand Down Expand Up @@ -67,4 +69,9 @@ public class EsbFileSourceV3DTO {
*/
@JsonProperty("file_source_code")
private String fileSourceCode;

@JsonIgnore
public List<String> getTrimmedFiles() {
return ListUtil.trimStringList(files);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

package com.tencent.bk.job.execute.model.esb.v3.request;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.tencent.bk.job.common.constant.JobConstants;
import com.tencent.bk.job.common.esb.model.EsbAppScopeReq;
Expand Down Expand Up @@ -140,6 +141,11 @@ private void trimIps(List<EsbIpDTO> ips) {
});
}
}

@JsonIgnore
public String getTrimmedTargetPath(){
return targetPath == null ? null : targetPath.trim();
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

package com.tencent.bk.job.execute.model.web.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.tencent.bk.job.common.model.vo.TaskTargetVO;
import io.swagger.annotations.ApiModelProperty;
Expand All @@ -43,4 +44,9 @@ public class ExecuteFileDestinationInfoVO {

@ApiModelProperty("目标机器列表")
private TaskTargetVO server;

@JsonIgnore
public String getTrimmedPath() {
return path == null ? null : path.trim();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@

package com.tencent.bk.job.execute.model.web.vo;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.tencent.bk.job.common.model.vo.TaskTargetVO;
import com.tencent.bk.job.common.util.ListUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
Expand Down Expand Up @@ -60,4 +62,9 @@ public class ExecuteFileSourceInfoVO {

@ApiModelProperty(value = "文件源ID")
private Integer fileSourceId;

@JsonIgnore
public List<String> getTrimmedFileLocation() {
return ListUtil.trimStringList(fileLocation);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ private ValidateResult checkFileSource(EsbFileSourceV3DTO fileSource) {
if (fileType != null && !TaskFileTypeEnum.isValid(fileType)) {
return ValidateResult.fail(ErrorCode.ILLEGAL_PARAM_WITH_PARAM_NAME, "file_source.file_type");
}
List<String> files = fileSource.getFiles();
List<String> files = fileSource.getTrimmedFiles();
if (files == null || files.isEmpty()) {
log.warn("File source contains empty file list");
return ValidateResult.fail(ErrorCode.MISSING_PARAM_WITH_PARAM_NAME, "file_source.file_list");
Expand Down Expand Up @@ -188,8 +188,8 @@ private ValidateResult checkFileSource(EsbFileSourceV3DTO fileSource) {
}

private ValidateResult checkFastTransferFileRequest(EsbFastTransferFileV3Request request) {
if (!FilePathValidateUtil.validateFileSystemAbsolutePath(request.getTargetPath())) {
log.warn("Fast transfer file, target path is invalid!path={}", request.getTargetPath());
if (!FilePathValidateUtil.validateFileSystemAbsolutePath(request.getTrimmedTargetPath())) {
log.warn("Fast transfer file, target path is invalid!path={}", request.getTrimmedTargetPath());
return ValidateResult.fail(ErrorCode.MISSING_OR_ILLEGAL_PARAM_WITH_PARAM_NAME, "file_target_path");
}
if ((request.getAccountId() == null || request.getAccountId() <= 0L)
Expand Down Expand Up @@ -249,7 +249,7 @@ private StepInstanceDTO buildFastFileStepInstance(String username,
stepInstance.setAccountAlias(request.getAccountAlias());
stepInstance.setStepId(-1L);
stepInstance.setExecuteType(StepExecuteTypeEnum.SEND_FILE);
stepInstance.setFileTargetPath(request.getTargetPath());
stepInstance.setFileTargetPath(request.getTrimmedTargetPath());
stepInstance.setFileTargetName(request.getTargetName());
stepInstance.setFileSourceList(convertFileSource(request.getAppId(), request.getFileSources()));
stepInstance.setAppId(request.getAppId());
Expand Down Expand Up @@ -300,8 +300,8 @@ private List<FileSourceDTO> convertFileSource(Long appId, List<EsbFileSourceV3DT
}
fileSourceDTO.setFileType(fileType);
List<FileDetailDTO> files = new ArrayList<>();
if (fileSource.getFiles() != null) {
for (String file : fileSource.getFiles()) {
if (fileSource.getTrimmedFiles() != null) {
for (String file : fileSource.getTrimmedFiles()) {
FileDetailDTO fileDetailDTO;
if (fileType == TaskFileTypeEnum.LOCAL.getType()) {
// 从制品库获取本地文件信息
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ private boolean checkFastPushFileRequest(WebFastPushFileRequest request) {
return false;
}
for (ExecuteFileSourceInfoVO fileSource : request.getFileSourceList()) {
if (CollectionUtils.isEmpty(fileSource.getFileLocation())) {
if (CollectionUtils.isEmpty(fileSource.getTrimmedFileLocation())) {
log.warn("Fast send file ,files are empty");
return false;
}
Expand All @@ -435,15 +435,15 @@ private boolean checkFastPushFileRequest(WebFastPushFileRequest request) {
log.warn("Fast send file, account is empty!");
return false;
}
for (String file : fileSource.getFileLocation()) {
for (String file : fileSource.getTrimmedFileLocation()) {
if (!FilePathValidateUtil.validateFileSystemAbsolutePath(file)) {
log.warn("Fast send file, fileLocation is null or illegal!");
return false;
}
}
}
}
if (!FilePathValidateUtil.validateFileSystemAbsolutePath(fileDestination.getPath())) {
if (!FilePathValidateUtil.validateFileSystemAbsolutePath(fileDestination.getTrimmedPath())) {
log.warn("Fast send file, fileDestinationPath is null or illegal!");
return false;
}
Expand Down Expand Up @@ -476,7 +476,7 @@ private StepInstanceDTO buildFastFileStepInstance(String userName, Long appId, W
ExecuteFileDestinationInfoVO fileDestination = request.getFileDestination();
stepInstance.setAccountId(fileDestination.getAccountId());
stepInstance.setTargetExecuteObjects(ExecuteTargetDTO.fromTaskTargetVO(fileDestination.getServer()));
stepInstance.setFileTargetPath(fileDestination.getPath());
stepInstance.setFileTargetPath(fileDestination.getTrimmedPath());
stepInstance.setStepId(-1L);
stepInstance.setExecuteType(StepExecuteTypeEnum.SEND_FILE);
stepInstance.setFileSourceList(convertFileSource(request.getFileSourceList()));
Expand Down Expand Up @@ -512,8 +512,8 @@ private List<FileSourceDTO> convertFileSource(List<ExecuteFileSourceInfoVO> file
fileSourceDTO.setFileType(fileType.getType());
fileSourceDTO.setFileSourceId(fileSource.getFileSourceId());
List<FileDetailDTO> files = new ArrayList<>();
if (fileSource.getFileLocation() != null) {
for (String file : fileSource.getFileLocation()) {
if (fileSource.getTrimmedFileLocation() != null) {
for (String file : fileSource.getTrimmedFileLocation()) {
if (TaskFileTypeEnum.LOCAL == fileType) {
files.add(new FileDetailDTO(true, file, fileSource.getFileHash(),
Long.valueOf(fileSource.getFileSize())));
Expand Down
Loading