如何强制球衣接受

问题描述:

我的客户面临的问题与新泽西州的查询参数“>”字,我已经通过一些日期过滤器作为参数,它包含“=>”和泽西抱怨:如何强制球衣接受

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); 

一些尝试后我理解,“>”是问题的原因(也日期空间被错误编码)。如果我删除它泽西是好的,但Web服务不起作用。有没有特殊的方法来传递具有“=>”而不是“=”的参数? 当我直接在浏览器试试URL它的工作原理:

http://www.xxxx.com/api/orders/?display=full&date=1&filter[date_upd]=>[2016-01-08%2010:32:00]&filter[valid]=1 

,如果我建立的网址与UriBuilder这样:

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")) 

用同“路径段为空”的错误

更多的调查之后,它变成了泽西问题是由于错误的方式回报(因为或者一个参数),关于webservice,我最终通过在编码之前用'+'替换空间并使用UriComponent.Type代码和UriComponent.Type.FRAG包含'>'的参数上的MENT:

 CustomData dat = getWebResource() 
      .path(path) 
      .queryParam("date","1") 
      .queryParam("filter[date_upd]",UriComponent.encode(">[2016-01-08+10:32:00]", UriComponent.Type.FRAGMENT)) 
      .queryParam("filter[valid]","1") 
      .type(MediaType.APPLICATION_XML) 
      .get(CustomData.class);