[英]IllegalArgumentException caught when parsing URL with JSON String
我需要使用看起來像的JSON數據來制定一個url
http://someurl.com/passfail?parameter= {“data1”:“123456789”,“data2”:“123456789”},我需要使用JBoss的ClientResponse傳遞它以獲得響應狀態。 我首先嘗試傳入文字字符串數據
ClientRequest clientrequest = new ClientRequest("http://someurl.com/passfail?parameter={\"data1\":\"123456789\",\"data2\":\"123456789\"});// assuming the "\" is formulated correctly
但它給了一個例外。 因此我也嘗試使用URL url = new URL(url),但它也不起作用。
我有以下異常嘗試嘗試,我感覺非常困難,我希望有人可以提供幫助。
拋出:IllegalArgumentException:
org.jboss.resteasy.specimpl.UriBuilderImpl.buildFromMap(UriBuilderImpl.java:408)>
org.jboss.resteasy.specimpl.UriBuilderImpl.buildFromValues(UriBuilderImpl.java:558)>
org.jboss.resteasy.specimpl.UriBuilderImpl.build(UriBuilderImpl.java:539)>
org.jboss.resteasy.client.ClientRequest.getUri(ClientRequest.java:786)>
org.jboss.resteasy.client.core.executors.ApacheHttpClientExecutor.execute(ApacheHttpClientExecutor.java:77)>
org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:39)>
org.jboss.resteasy.plugins.interceptors.encoding.AcceptEncodingGZIPInterceptor.execute(AcceptEncodingGZIPInterceptor.java:40)>
org.jboss.resteasy.core.interception.ClientExecutionContextImpl.proceed(ClientExecutionContextImpl.java:45)>
org.jboss.resteasy.client.ClientRequest.execute(ClientRequest.java:473)>
org.jboss.resteasy.client.ClientRequest.httpMethod(ClientRequest.java:704)>
org.jboss.resteasy.client.ClientRequest.get(ClientRequest.java:509)>
org.jboss.resteasy.client.ClientRequest.get(ClientRequest.java:537)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)>
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)>
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)>
weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:505)>
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:251)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet JSP
weblogic.servlet.jsp.JspBase.service(JspBase.java:34)>
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)>
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)>
weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:505)>
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:251)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)>
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)>
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)>
weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:505)>
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:251)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX at line personal Servlet
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)>
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)>
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)>
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)>
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498)>
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)>
weblogic.security.service.SecurityManager.runAs(Unknown Source)>
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)>
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)>
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)>
weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)>
weblogic.work.ExecuteThread.run(ExecuteThread.java:173)>
Caused by: java.lang.IllegalArgumentException>
java.net.URI.create(URI.java:842)>
org.jboss.resteasy.specimpl.UriBuilderImpl.buildFromMap(UriBuilderImpl.java:404)>
... 60 more>
Caused by: java.net.URISyntaxException: Illegal character in query index 77: http://someurl.com/passfail?parameter={"data1":"123456789","data2":"123456789"}>
java.net.URI$Parser.fail(URI.java:2809)>
java.net.URI$Parser.checkChars(URI.java:2982)>
java.net.URI$Parser.parseHierarchical(URI.java:3072)>
java.net.URI$Parser.parse(URI.java:3014)>
java.net.URI.<init>(URI.java:578)>
java.net.URI.create(URI.java:840)>
... 61 more>
問題是您在URI字符串中傳遞非法字符: Java - 將String轉換為有效的URI對象
http://someurl.com/passfail?parameter={"data1":"123456789","data2":"123456789"}>
您需要“轉義”URI中的違規字符。
以下是一些替代方案:
最后但並非最不重要:
PS:你網址中的那個“>”怎么樣?
謝謝保羅,
我已經閱讀並對此進行了另一輪研究,我正在使用
String url ="http://someurl.com/passfail?parameter={"data1":"123456789","data2":"123456789"}";
String encodedURL = URIUtil.encodeQuery(url);
它給了我200的狀態,這是成功的。
我使用的API來自org.apache.commons.httpclient.util.URIUtil 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.