- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个半包装 Java 的 URL 类
的实用程序类,并且我已经编写了一堆测试用例来验证我用自定义实现包装的方法。我不明白某些 Java 的某些 URL
字符串的 getter 的输出。
根据RFC 3986规范,路径组件定义如下:
The path is terminated by the first question mark ("?") or number sign
("#") character, or by the end of the URI.
查询组件定义如下:
The query component is indicated by the first question
mark ("?") character and terminated by a number sign ("#") character
or by the end of the URI.
我有几个测试用例,它们被 Java 视为有效的 URL,但是路径、文件和查询的 getter 没有返回我预期的值:
URL url = new URL("https://www.somesite.com/?param1=val1");
System.out.print(url.getPath());
System.out.println(url.getFile());
System.out.println(url.getQuery());
以上结果如下:
//?param1=val1
param1=val1
<empty string>
我的另一个测试用例:
URL url = new URL("https://www.somesite.com?param1=val1");
System.out.print(url.getPath());
System.out.println(url.getFile());
System.out.println(url.getQuery());
以上结果如下:
?param1=val1
param1=val1
<empty string>
根据 Java URL
的文档:
public String getFile()
Gets the file name of this URL. The returned file portion will be the
same as getPath(), plus the concatenation of the value of getQuery(), if
any. If there is no query portion, this method and getPath() will return
identical results.
Returns:
the file name of this URL, or an empty string if one does not exist
因此,当调用 getQuery()
时,我的测试用例会生成空字符串。在这种情况下,我希望 getFile()
返回与 getPath()
相同的值。事实并非如此。
我曾期望两个测试用例的输出如下:
<empty string>
?param1=val1
param1=val1
也许我对 RFC 3986 的解释不正确。但是我看到的输出也不符合 URL 类的文档?任何人都可以解释我所看到的吗?
最佳答案
这里是一些基于你的片段的可执行代码:
import java.net.MalformedURLException;
import java.net.URL;
public class URLExample {
public static void main(String[] args) throws MalformedURLException {
printURLInformation(new URL("https://www.somesite.com/?param1=val1"));
printURLInformation(new URL("https://www.somesite.com?param1=val1"));
}
private static void printURLInformation(URL url) {
System.out.println(url);
System.out.println("Path:\t" + url.getPath());
System.out.println("File:\t" + url.getFile());
System.out.println("Query:\t" + url.getQuery() + "\n");
}
}
工作正常,这是您可能预期的结果。唯一的区别是,您使用了一个 System.out.
print,然后是 System.out.
println在同一行中打印路径和文件的结果。
https://www.somesite.com/?param1=val1
Path: /
File: /?param1=val1
Query: param1=val1
https://www.somesite.com?param1=val1
Path:
File: ?param1=val1
Query: param1=val1
关于Java URL 类 getPath()、getQuery() 和 getFile() 与 RFC3986 URI 语法不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30003540/
尝试在 Laravel 中处理数据表: 错误: 在 Laravel 数据表中的数组上调用成员函数 getQuery() 这是 Laravel 代码: Controller : public funct
Documentum 示例代码从未被深入注释过,所以我的问题是: 这行是什么意思? IDfQuery query = DfcUtils.getClientX().getQuery(); 最佳答案 您可
当我执行方法 getMachineSettings 时出现错误: Fatal error: Uncaught Error: Call to undefined method Doctrine\DBAL
在我的测试项目中,我有 2 个实体: - 最终用户(FOSUserBundle 的扩展) - Rezo(将包含两个成员之间的批准关系) 这两个实体都被定义为: 最终用户实体: disciplines
我正在使用ongr / elasticsearch-dsl bundle 包构建查询,并且需要在不同位置组成搜索对象。当我在同一位置进行操作时,它可以按预期工作。 use ONGR\Elasticse
/search.aspx?Search=测试 function getQuery(name) { var match = RegExp('[?&]' + name + '=([^&]*)').
这个问题已经有答案了: Dynamic "string" in R (4 个回答) 已关闭 5 年前。 是否可以将值传递到 dbGetQuery 中的查询中来自 RMySQL 包。 例如,如果我在字符
大家下午好!我正在 Android Studio 中开发一个搜索系统,但我是 Java 语言的初学者,我的错误可能很愚蠢。我想帮助理解两件事。第一:为什么我不能访问 this.getApplicati
我认为使用 getQuery丢失信息,很危险,而只有 getRawQuery应该使用,并且任何已知编码的查询参数值都应该用 URLDecoder 手动解码(一旦原始查询在 & 字符上拆分) . 恰当的
我正在尝试实现此阶段的项目 - https://hyperskill.org/projects/62/stages/337/implement 。我需要将 String code = Exchange
我正在实现一个包含搜索服务(AbstractService)的osgi包。该服务包含一个以 NodeIterator 对象的形式获取内容节点列表的方法。 public NodeIterator ge
我在 Laravel 上工作了很多,从来没有遇到过以下错误: 在 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.
在 ParseQueryAdapter 中,我想返回我正在查询的对象的关系。这是我目前所拥有的;我正在执行查询,检索当前用户创建的所有目标;在 public View getItemView 中,我开
方法一 global $database; $user = new stdClass; $user->id = NULL; $user->name = $name; $user->
我想使用 joomla 内置数据库类构建以下查询。 SELECT * FROM table_name ORDER BY id DESC LIMIT 1 这是我到目前为止建立的查询。 $db =& JF
我正在学习请求类。 我有这个网址http://localahost/blog/search?year=2013&month=07 当我尝试 print_r($_GET) 时,它会按预期返回数组。 当我
我正在学习请求类。 我有这个网址 http://localahost/blog/search?year=2013&month=07 当我尝试 print_r($_GET) 时,它会按预期返回数组。 当
我有以下简单的 Controller : class OrdersController extends \BaseController { public function index()
我正在编写一个半包装 Java 的 URL 类 的实用程序类,并且我已经编写了一堆测试用例来验证我用自定义实现包装的方法。我不明白某些 Java 的某些 URL 字符串的 getter 的输出。 根据
我是一名优秀的程序员,十分优秀!