gpt4 book ai didi

java - 验证 REST API 中的查询参数

转载 作者:行者123 更新时间:2023-12-02 01:55:45 25 4
gpt4 key购买 nike

我有一个接受查询参数的 REST API。 当且仅当一次仅传递一个查询参数并且该参数位于有效查询参数列表中时,查询参数才有效。

目前我的逻辑是:

我正在 map 中收集查询参数。然后检查它的大小。如果 size > 1 函数会抛出错误。如果情况并非如此,则迭代映射,如果找到有效参数之外的参数,则函数将引发错误。

例如:

if(queryParam.size()>1) {
throw new FailureResponse();
}

queryParam.forEach(e->{
String key = e.getKey();
if(!key.equalsIgnoreCase("p1") && !key.equalsIgnoreCase("p2")) {
throw new FailureResponse();
}

});

但我认为这样我违反了 SOLID 设计原则,即类应该对扩展开放,但对修改关闭。

我还考虑过创建一个文件,然后从中读取可接受的参数,但这会增加 API 的响应时间,因为它涉及读取文件。

有什么方法可以保留和读取有效的查询参数并且不违反设计原则吗?

最佳答案

您可以维护有效参数的枚举,并在适用时扩展枚举,例如

public enum QueryParams{
PARAM_1("param1"),
PARAM_2("param2"),

private String paramValue;
QueryParams(String paramName){
this.paramValue = paramValue();
}
public void getParamValue(){
return this.value;
}
}

然后您可以迭代此枚举的值集以过滤掉无效值

List<String> validParams = Arrays.asList(QueryParams.values()).stream().map(QueryParams::getParamValue).collect(Collectors.toList());
queryParams.removeAll(validParams);
if(queryParams.size()!=0) {
throw new FailureResponse();
}
}

这可以帮助您在不进行任何更改的情况下维护 API 类,每当添加新参数时,只需扩展枚举,其余所有内容都会自动扩展,因为它完全取决于枚举中的值。

关于java - 验证 REST API 中的查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52321758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com