java - 通过 REST-API 获取数据时有关 java.lang.IllegalArgumentException 的问题

标签 java rest url

我尝试使用 REST API 并尝试连接到服务器并获取 Java 中的数据。 我开发了一些代码,例如;

Client client = Client.create();
WebResource webResource = client.resource("https://XXXX/0/devices/2c5a7b88-1eca-48b3-ae68-cdcb011a84d9/s/car-exists\\?latest=2");
WebResource.Builder builder = webResource.getRequestBuilder();
for (NewCookie c : cookies)
  builder = builder.cookie(c);
ClientResponse response = builder.accept("application/json").get(ClientResponse.class);

在上面最后一句之后我遇到了异常;

javax.faces.FacesException: #{XXX}: java.lang.IllegalArgumentException: Illegal character in path at index 117: https://XXX/0/devices/2c5a7b88-1eca-48b3-ae68-cdcb011a84d9/s/car-exists\?latest=2
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at org.primefaces.application.DialogActionListener.processAction(DialogActionListener.java:45)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at filter.NoCacheFilter.doFilter(NoCacheFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: Illegal character in path at index 117: https://XXX/0/devices/2c5a7b88-1eca-48b3-ae68-cdcb011a84d9/s/car-exists\?latest=2
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 27 more

我在命令行上使用了对 REST-API 有用的应用程序“curl”,并使用相同的 url 轻松获取数据。但是,我无法在 Java 上做到这一点。网址有问题吗?请纠正我,因为我发现该代码没有任何问题。

最佳答案

从 URL 中删除 \\。它不应该在那里。仅使用 ? 来启动查询字符串。

关于java - 通过 REST-API 获取数据时有关 java.lang.IllegalArgumentException 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888562/

相关文章:

java - 无法获取字符串拆分中的正则表达式示例

java - 设置目录的读取权限

ruby-on-rails - 使用 OAuth 访问私有(private)仓库的 Github API

php - 有没有办法为没有实际支持页面的 URL 提供网页?

java - 如何在 Struts 2 中进行动态 URL 重定向?

regex - Django urls.py 正则表达式不匹配?

java - 寻找在 Java 中检测 AWS Lambda 超时(超时前几秒)并进行测试的方法

java - AdMob 覆盖 Recyclerview 列表项

java - 该类型未定义方法 "X"

android - 将数据从跨平台应用程序传输到服务器的最佳实践