使用 JSON 字符串解析 URL 时捕获 IllegalArgumentException

2024-04-08

我需要使用 JSON 数据制定一个 url,如下所示

http://someurl.com/passfail?parameter= 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(the url) 但它不起作用。

我在尝试时遇到了以下异常,我感觉很困难,希望有人能提供帮助。

非法参数异常:

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 - 将字符串转换为有效的 URI 对象 https://stackoverflow.com/questions/573184/java-convert-string-to-valid-uri-object

http://someurl.com/passfail?parameter={"data1":"123456789","data2":"123456789"}>

您需要“转义” URI 中的违规字符。

以下是一些替代方案:

  • 我应该如何转义 JSON 中的字符串? https://stackoverflow.com/questions/3020094/how-should-i-escape-strings-in-json

  • Java - 将字符串转换为有效的 URI 对象 https://stackoverflow.com/questions/573184/java-convert-string-to-valid-uri-object

  • 如何对 URI 参数值进行编码? https://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values

  • 用Java编码URL查询参数 https://stackoverflow.com/questions/5330104/encoding-url-query-parameters-in-java

  • http://docs.oracle.com/javase/6/docs/api/java/net/URI.html http://docs.oracle.com/javase/6/docs/api/java/net/URI.html

最后但并非最不重要:

  • java.net.URLEncoder http://docs.oracle.com/javase/6/docs/api/jav/net/URLEncoder.html

PS:你的网址中的“>”怎么样?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JSON 字符串解析 URL 时捕获 IllegalArgumentException 的相关文章

随机推荐