JavaEE有ServletRequest.getParameterValues()个.

在非EE平台上,URL.getQuery()只返回一个字符串.

在JavaEE上为not时,正确解析URL中的查询字符串的正常方式是什么?


在答案中,try 制作自己的解析器是很流行的.这是一个非常有趣和激动人心的微编码项目,但是100.

下面的代码片段通常有缺陷或损坏.打破它们对读者来说是一项有趣的练习.And to the hackers attacking the websites that use them美元.

解析查询字符串是一个定义良好的问题,但阅读规范并理解细微差别并非易事.让一些平台库编码人员为您做艰苦的工作,并进行修复,这样做要好得多!

推荐答案

自从安卓M以来,事情变得更加复杂.android.net.URI.getQueryParameter()的答案中有一个bug,它会在JellyBean之前打破空格.

所以现在最好的答案是UrlQuerySanitizer.这从API级别1开始就存在,现在仍然存在.它还会让你思考一些棘手的问题,比如如何处理特殊字符或重复值.

最简单的代码是

UrlQuerySanitizer.ValueSanitizer sanitizer = UrlQuerySanitizer.getAllButNullLegal();
// remember to decide if you want the first or last parameter with the same name
// If you want the first call setPreferFirstRepeatedParameter(true);
sanitizer.parseUrl(url);
String value = sanitizer.getValue("paramName");

如果您对默认解析行为感到满意,可以执行以下操作:

new UrlQuerySanitizer(url).getValue("paramName")

但您应该确保了解默认的解析行为是什么,因为它可能不是您想要的.

Java相关问答推荐

'在使用apache poi生成Excel数据透视表时,行标签显示为第一列标题,并显示分类汇总

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

BiPredicate和如何使用它

Javascript在边界中心调整ImageView大小

Android Studio—java—在onBindViewHolder中,将断点和空白添加到BackclerView中

无法传递消费者<;>;实例

在for—each循环中的AnimationTimer中的if语句'

现场观看Android Studio中的变化

为什么一个Test的instance?& gt;在构造函数中接受非空对象?

JPanel透支重叠的JComcoBox

GetChildren().emoveAll()不会删除 node

Tinylog中的滚动文件会在每次应用启动时覆盖日志(log)文件

使用正则表达式从字符串中提取多个值

当构造函数创建一个新实例时,Java为什么需要&new";

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

找出承载Cargo 的最小成本

Java.time.OffsetDateTime的SQL Server数据库列类型是什么?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API