我在客户端遇到了 Jersey 的问题,我必须传递一些日期过滤器作为参数,它包含“=>”并且 Jersey 抱怨:
Caused by: java.lang.IllegalArgumentException: Path segment is null
at com.sun.jersey.api.uri.UriBuilderImpl.appendPath(UriBuilderImpl.java:547)
查询本身如下:
CustomData dat = getWebResource()
.path(path)
.queryParam("display","full")
.queryParam("date","1")
.queryParam("filter[date_upd]",">[2016-01-08 10:32:00]")
.queryParam("filter[valid]","1")
.type(MediaType.APPLICATION_XML).get(CustomData.class);
经过一些尝试,我明白'>'是问题的原因(日期中的空间也被错误编码)。如果我删除它泽西是好的,但网络服务不起作用。有没有一种特殊的方法来传递具有“=>”而不是“=”的参数?当我直接在浏览器中尝试 URL 时,它可以工作:
http://www.xxxx.com/api/orders/?display=full&date=1&filter[date_upd]=>[2016-01-08%2010:32:00]&filter[valid]=1
如果我像这样使用 UriBuilder 构建 url:
uri = UriBuilder.fromPath("http://www.xxxx.com/api/"+Order.URLORDER)
.queryParam("display","full")
.queryParam("date","1")
.queryParam("filter[date_upd]",">[2016-01-08 10:32:00]")
.queryParam("filter[valid]","1").build();
System.out.println(uri.toASCIIString());
//http://www.xxxx.com/api/orders/?display=full&date=1&filter%5Bdate_upd%5D=%3E%5B2016-01-08+10:32:00%5D&filter%5Bvalid%5D=1
并在浏览器中尝试它也可以,但是如果我在查询中使用 URI,则查询再次失败。问题应该出在其他地方。
URI uri = UriBuilder.fromPath("http://www.xxxx.com/api/"+Order.URLORDER)
.queryParam("display","full")
.queryParam("date","1")
.queryParam("filter[date_upd]",">[2016-01-08 10:32:00]")
.queryParam("filter[valid]","1").build();
CustomData dat = getWebResource().uri(uri).type(MediaType.APPLICATION_XML).get(CustomData.class);
任何想法?
也试过
.queryParam("filter[date_upd]",URLEncoder.encode(">[2016-01-08 10:32:00]", "UTF-8"))
和
.queryParam("filter[date_upd]",URLEncoder.encode("%3E[2016-01-08 10:32:00]", "UTF-8"))
具有相同的“路径段为空”错误