在 Spring 中使用 RestTemplate。异常 - 没有足够的变量可用于扩展

2024-02-05

我正在尝试访问 API 的内容,并且需要使用 RestTemplate 发送 URL。

String url1 = "http://api.example.com/Search?key=52ddafbe3ee659bad97fcce7c53592916a6bfd73&term=&limit=100&sort={\"price\":\"desc\"}";

OutputPage page = restTemplate.getForObject(url1, OutputPage .class);

但是,我收到以下错误。

Exception in thread "main" java.lang.IllegalArgumentException: Not enough variable values available to expand '"price"'
at org.springframework.web.util.UriComponents$VarArgsTemplateVariables.getValue(UriComponents.java:284)
at org.springframework.web.util.UriComponents.expandUriComponent(UriComponents.java:220)
at org.springframework.web.util.HierarchicalUriComponents.expandInternal(HierarchicalUriComponents.java:317)
at org.springframework.web.util.HierarchicalUriComponents.expandInternal(HierarchicalUriComponents.java:46)
at org.springframework.web.util.UriComponents.expand(UriComponents.java:162)
at org.springframework.web.util.UriTemplate.expand(UriTemplate.java:119)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:501)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:239)
at hello.Application.main(Application.java:26)

如果我删除排序标准,它就可以正常工作。 我需要使用排序标准解析 JSON。 任何帮助都感激不尽。

Thanks


根本原因在于RestTemplate考虑大括号{...}在给定的 URL 中作为 URI 变量的占位符,并尝试根据它们的名称替换它们。例如

{pageSize}

会尝试获取一个名为的 URI 变量pageSize。这些 URI 变量是用其他一些重载的变量指定的getForObject http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject-java.lang.String-java.lang.Class-java.util.Map-方法。您尚未提供任何内容,但您的 URL 需要提供一个,因此该方法会引发异常。

一种解决方案是制作一个String包含值的对象

String sort = "{\"price\":\"desc\"}";

并在 URL 中提供真实的 URI 变量

String url1 = "http://api.example.com/Search?key=52ddafbe3ee659bad97fcce7c53592916a6bfd73&term=&limit=100&sort={sort}";

你会打电话给你的getForObject() like so

OutputPage page = restTemplate.getForObject(url1, OutputPage.class, sort);

我强烈建议您不要在 GET 请求的请求参数中发送任何 JSON,而是在 POST 请求的正文中发送。

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

在 Spring 中使用 RestTemplate。异常 - 没有足够的变量可用于扩展 的相关文章

随机推荐

  • 如何使用 SQL Server 配置 Passportjs?

    我正在编写一个基于的应用程序SQL服务器 https www npmjs com package mssql ExpressJs NodeJS AngularJs 我是一个快速初学者 我需要处理会话 所以我一直在考虑 PassportJs
  • 用于关系可视化的javascript框架[重复]

    这个问题在这里已经有答案了 可能的重复 javascript 中的图形可视化代码 https stackoverflow com questions 7034 graph visualization code in javascript 我
  • 对象数组数组的 PHPStorm 代码提示

    在 PHPStorm 中 对象数组的代码提示既简单又很棒 class FooList public function construct this gt fooList new Foo 1 this gt fooList new Foo 2
  • PHP7 中的 Argon2i - 选择合适的选项

    我应该使用什么值来生成 Argon2i 哈希值以及如何找到我的硬件可以承受的适当设置 Namely memory cost time cost threads as options memory cost gt 1 lt lt 17 tim
  • JavaScript iFrame 限制

    我知道 出于安全原因 如果 iframe 属于不同的域 则 javascript 无法读取 iframe 的内容 这是有道理的 因为整个页面可能是一个 iframe 并且在框架之外具有监听脚本 问题是 在另一个方向上是否也有同样的限制 if
  • 选项“noEmit”不能与选项“incremental”一起指定

    我正在开发一个 next js 应用程序 它有以下内容tsconfig js compilerOptions target ES2018 module esnext lib dom es2018 es2019 array jsx prese
  • 如何在groovy中获取方法参数/参数的名称?

    我有一个 groovy 脚本 它有一个带有 2 个参数的函数 其中之一是哈希图 我想检查函数内部哈希图变量的名称是否包含子字符串 我该怎么做 def myfunc String var HashMap var2 need a routine
  • Eclipse:向 Maven 日志条目添加时间戳

    我正在使用 Eclipse Neon 1 并且我使用deployGoogle App Engine 插件的目标
  • 在 firebase 上进行电话身份验证时出错

    在 firebase 上进行电话号码身份验证时 我因此错误消息而崩溃 请帮忙 com russvkm chathut 是我的包名称 E AndroidRuntime FATAL EXCEPTION main Process com russ
  • PhpStorm 不与服务器同步

    问题是这样的 我的 phpStorm 项目使用通过 FTP 远程访问服务器 当我保存修改后的文件时 文件会正常上传到服务器 但是当我在服务器上创建文件夹时 我在 phpStorm 中看不到它 任何想法 PhpStorm 是围绕 本地项目文件
  • XACML 3.0 中的多重决策配置文件策略

    我需要为特定用户编写一个策略 它将返回如下 xacml 响应 该政策基于单用户 bob FirstName Create true Read true Update true Delete false MiddleName Create t
  • 这怎么可能:在 WaitOne 中处理 OnPaint

    我有一个ManualResetEvent 有一次 我使用等待该事件WaitOne 令我惊讶的是 我收到了一份OnPaint事件 而在WaitOne 这种情况也经常发生 堆栈跟踪如下所示 我明白了WaitOne会阻塞当前线程 并且在事件触发之
  • 如果Android中的应用程序被强制关闭,如何重置警报

    如果出现以下情况 我的应用程序使用 AlarmManager 设置的警报将被清除 用户在设置中强制关闭我的应用程序 一些任务杀手应用程序自动终止了我的应用程序进程 Android 本身杀死了我的应用程序 因为前端应用程序需要内存 请告诉我如
  • F# XML 多行文档,Visual Studio 2017

    我想添加一个多行 XML 文档 当我的鼠标悬停在它上面时 该文档将出现在 Intelli Sense 气泡中 参见示例 当我使用 Visual Studio 2015 时 以下代码可以工作 请参见下面的屏幕截图 但现在当我使用 Visual
  • 预加载组件

    在工作中 我们使用 DevExpress 作为用户界面 第一次打开使用 DevExpress 控件的表单时 会出现很长的暂停 在某些客户端上有时会出现 15 20 秒 在 Visual Studio 中 我可以看到该阶段正在加载大量程序集
  • CSS3可计算表达式?

    是否有任何技术允许在 css3 语句中使用表达式 通常 做以下事情是有帮助的 width 35 20px或类似的 目前 针对这些情况 我唯一的解决方案是重新设计页面或使用 javascript 动态设置 css CSS 关于值和单位的工作草
  • 调试类型初始值设定项中的异常

    我有一个静态类 没有静态构造函数 但有许多静态成员 第一次使用该类时 我抛出 TypeInitializationException 我正在打破 CLR 异常 并且已禁用 仅我的代码 问题是我只有在第一次使用这个类时才会得到这个异常 我不会
  • 如何在 ASP.NET MVC 5 中插入主从表

    I have Orders表和订单详细信息数据库中的表 通过 Entity Framework 6 我获得了一个模型 因此我可以从它生成类 我还从 Orders 表生成了控制器和视图 Orders folio PK date custome
  • ssl_transport_security.cc:599] 无法加载任何根证书

    我尝试使用 hyperledger composer fabric v0 19 0 创建自己的网络 网络构建似乎不错 但是当我执行composer network install 我收到这个错误 Composer Install Insta
  • 在 Spring 中使用 RestTemplate。异常 - 没有足够的变量可用于扩展

    我正在尝试访问 API 的内容 并且需要使用 RestTemplate 发送 URL String url1 http api example com Search key 52ddafbe3ee659bad97fcce7c53592916