gpt4 book ai didi

java - 作为 URL 参数值的分隔列表

转载 作者:行者123 更新时间:2023-11-30 08:22:43 24 4
gpt4 key购买 nike

我有一个现有的 Java Web 应用程序,它有大约 50 个查询参数,类似于

http://localhost/myapp?a=1&b=2&c=3&d=4

然后我使用 ServletRequest.getParameter 在我的 servlet 中提取值,类似于

String a = req.getParameter("a");

我现有的每个参数都是单值的。我现在需要引入一个新的多值参数。关于 RESTful 实践和 servlet 规范,执行此操作的最佳实践是什么?

我正在考虑以下两个选项,但如果有更好的,请指出。

逗号分隔的单个参数

http://localhost/myapp?a=1&b=2&c=3&d=4&e=5,6,7,8

这将被编码为

http://localhost/myapp?a=1&b=2&c=3&d=4&e=5%256%257%258

并提取为

String eStr = req.getParameter("e");
String[] e = eStr.split(",");

多个参数

http://localhost/myapp?a=1&b=2&c=3&d=4&e=5&e=6&e=7&e=8

不需要任何特殊编码并被提取为

String[] e = req.getParameterValues("e");

最佳答案

根据 this question ,从技术上讲,没有定义的规范,所以从技术上讲,两者都是正确的,但是有 3 个原因我会选择 request.getParameterValues("…")

  1. 代码重用:您编写的每段代码都是引入错误的机会(即在本例中,解析器从您的 CSV 查询字符串中读取)。通常,引入一个库有一个缺点,你可能会为一个小函数引入一个重要的依赖,或者你可能不清楚第 3 方在他们的库中到底做了什么。在这种情况下,它本质上是一个第一方库,因为它是 JavaEE 实现本身为您提供的方法!它还提供……

  2. 意图清晰:之后阅读您的代码的任何人都会熟悉库方法并立即知道您在做什么。

  3. URL 结构:避免定界字符使 URL 更易于阅读。

既然你提到了 RESTful,我认为这里的主要事情是适本地使用查询字符串——避免使用它们在你的网站上提供静态内容页面 (page.html?id=12ndi4t!) ——但是一个 URL 结构,例如search.html?q=film&category=horror&category=comedy对于搜索页面来说非常清晰。


getParameterValues(…) 方法的缺点是未定义返回值的顺序,因此如果您不能依赖 e=5&e=6&e=7 生产:

String[] e = request.getParameterValues("e");
e[0] //5
e[1] //6
e[2] //7

如果这特别重要,您可能希望采用上面概述的第一种方法。

关于java - 作为 URL 参数值的分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170556/

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