使用 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 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐