如何在 Spring RestTemplate 中使用以 JSON 表示的查询参数?

2023-12-09

我需要使用 Spring RestTemplate 向具有表示为 JSON 的查询参数的 HTTP 端点发出请求。

restTemplate.getForObject(
    apiRoot + "/path" + "?object={myObject}",
    Response.class,
    new MyObject())

这里我需要MyObject转换为 JSON(显然是 URL 编码)。但RestTemplate只是将其转换为String with toString打电话代替。MyObjectJackson 可将其转换为 JSON。UriComponentsBuilder行为方式相同:

UriComponentsBuilder.fromHttpUrl(apiRoot)
    .path("/path")
    .queryParam("object", new MyObject()))
    .queryParam("access_token", accessToken)
    .toUri()

有没有办法避免打电话ObjectMapper.writeValueAsString用手?

更新:澄清一下,在结果中我需要有?object={"key":42}在我的 URI 中(或者以 URL 编码的形式?object=%7B%22key%22%3A42%7D) given MyObject有一项财产key其值等于42.


使用有什么问题writeValueAsString?你可以解释吗?

我想到的唯一解决方案如下(我不认为杰克逊是否有办法知道该对象应该在那一刻被序列化):

@Autowired
ObjectMapper objectMapper;

@Override
public void run(String... strings) throws Exception {

    String urlBase = "http://localhost:8080/path";

    RestTemplate restTemplate = new RestTemplate();

    String url;
    MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
    params.set("object", objectMapper.writeValueAsString(new MyObject()));

    UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(urlBase).queryParams(params);
    url = builder.build().toUri().toString();

    LOGGER.info("Composed before decode: " + url);

    //restTemplate.getForObject(url, Void.class);

    url = URLDecoder.decode(url, "UTF-8");

    LOGGER.info("Composed after decode: " + url);
}

Output:

2016-04-05 16:06:46.811  INFO 6728 --- [main] com.patrykwoj.StackOverfloApplication    : Composed before decode: http://localhost:8080/path?object=%7B%22key%22:43%7D
2016-04-05 16:06:46.941  INFO 6728 --- [main] com.patrykwoj.StackOverfloApplication    : Composed after decode: http://localhost:8080/path?object={"key":43}

Edit:

我忘了提及,发送 JSON 对象作为请求参数通常不是一个好主意。例如,您可能会遇到 JSON 中的大括号问题。

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

如何在 Spring RestTemplate 中使用以 JSON 表示的查询参数? 的相关文章

  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • 为什么通过 方法向 List 添加元素(类型正确)会出现编译错误? [复制]

    这个问题在这里已经有答案了 我对泛型通配符概念几乎没有疑问 1 假设我有一个方法 void write List
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 如何将本机数据库运算符 (postgres ~) 与 JPA 标准生成器一起使用?

    我使用 JPA 2 0 标准构建以下查询 简化 select n from notif n where n message b la 我正在使用 postgresql 数据库 我真的需要 运算符 而不是像 我可以使用与 CriteriaBu
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • 使用 Jena 查询维基数据

    目前 Wikidata 有一个 SPARQL 端点 https query wikidata org https query wikidata org 我想使用 Jena 3 0 1 查询此网站 我使用以下代码 但收到错误消息 端点返回的
  • 从 CLI 部署 Maven 项目?

    在 IDE 中构建并运行良好 cd home thufir NetBeansProjects HelloMaven JAVA HOME usr lib jvm java 8 openjdk amd64 home thufir local s
  • 避免 @Secured 注释的重复值

    我正在尝试使用以下方法来保护我的服务方法 Secured如下 public interface IUserService Secured ROLE ROLE1 ROLE ROLE2 ResponseEntity saveUser Creat
  • 在Java中如何将字节数组转换为十六进制?

    我有一个字节数组 我希望该数组的每个字节字符串转换为其相应的十六进制值 Java中有没有将字节数组转换为十六进制的函数 byte bytes 1 0 1 2 3 StringBuilder sb new StringBuilder for
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 如何在 Spring Mvc 项目中设置上下文根

    我在 Tomcat 服务器中使用 Spring MVC 项目 每次运行应用程序时 服务器上下文根都会更改 如何设置固定上下文根 我的项目名称是 DemoApplication 首先部署此上下文根 路径是 http localhost 808
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea
  • Java 中序列化的目的是什么?

    我读过很多关于序列化的文章 以及它如何如此美好和伟大 但没有一个论点足够令人信服 我想知道是否有人能真正告诉我通过序列化一个类我们真正可以实现什么 让我们先定义序列化 然后我们才能讨论它为什么如此有用 序列化只是将现有对象转换为字节数组 该
  • com.sun.xml.ws.message.saaj.SAAJHeader 无法转换为 com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader

    我正在尝试访问第三方 Web 服务 该服务要求我创建一个传递时间信息 用户名和密码的安全标头 我在网上搜索了可行的示例 并尝试了多种方法 我正在尝试使用 Java 6 中内置的内容来做到这一点 我不确定我做错了什么 从 WSDL 生成 We
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • 如何在J2ME中获取数字的幂[重复]

    这个问题在这里已经有答案了 可能的重复 J2ME power double double 数学函数实现 https stackoverflow com questions 2076913 j2me powerdouble double ma

随机推荐

  • 在 Apple M1 上使用 clang 出现“致命错误:找不到‘omp.h’文件”

    Clang 找不到omp h每当我尝试使用 openMP 标志进行编译时 这就是我想做的 clang dynamiclib I opt homebrew Cellar eigen 3 3 9 include eigen3 Xpreproce
  • 如何在Windows窗体应用程序的DataGridView行中动态添加控件?

    我的 DataGridView 每行都有不同的控件类型 现在我想根据该控件类型在每行中创建控件 这可能吗 如果是 那么如何 您可以在网格的 OnRowDatabound 上添加控件 然后您可以将控件添加到您的行 要将控件添加到单元格 请使用
  • 背景大小:涵盖性能问题

    我在使用大量元素时遇到性能问题 尤其是在 Safari 中 background size cover 我已经添加transform translate3d 0 0 0 这确实有一点帮助 但没有我想要的那么多 如果可能的话 我真的在寻找纯C
  • python argparse 当使用特定选项时忽略其他选项

    我正在编写一个 python 程序 我希望有一个以特定方式运行的命令行界面 命令行界面应接受以下调用 my prog test svg foo my prog font Sans test svg foo 它将生成一个带有单词的 svgfo
  • Lollipop 5.0.2 中 WIFI/3G/4G 位置返回 0.0

    我正在尝试根据以下内容获取位置WiFi 3G 4G连接但总是返回0 0 as latitude and longitude 如果使用相同的代码GPS ON然后它就可以工作了 所以从 4 4 开始有些东西发生了变化 还尝试了以下链接 但它也不
  • 如何在 helm 图表中使用值文件传递文件?

    我想将证书传递给舵图 目前我正在使用 set file global dbValues dbcacertificate server crt 传递证书 但我想传递舵图值文件中的文件 Values yaml 文件读取 global dbVal
  • WPF 中将窗口锚定到屏幕边缘

    我决定通过在 Visual Studio 2010 中编写一个音乐播放器来自学 C 我选择了 WPF 因为据我所知 它听起来像是一个很好的皮肤基础 我想对我的窗口进行编程 使其具有以下行为 如果窗口到达屏幕边缘 10 像素左右 它将捕捉到屏
  • Adobe Air Javascript API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 好吧 我觉得这是一个愚蠢的问题 但我在 Google 上确实找不到 Adob e AIR Javascript 的 API 我正在尝试访问文件系统和
  • Android 构建 apk 更改原始 png 文件

    最近 我从 SDK Tools r11 升级到 SDK Tools r16 后 某些设备出现了问题 我发现它与纹理相关 现在回顾我使用 SDK Tools r11 创建的 APK 文件 其中包含原始文件中纹理的精确副本 但是使用 SDK T
  • 在自定义 ArrayList 中仅添加一次项目

    我已经制作了自己的自定义 ArrayList 如下所示 public class Points String hoodName Double points Integer hoodId public Points String hN Dou
  • 在 R 中使用附加变量创建边列表

    我有这样的数据 ID c rep ID1 3 rep ID2 2 ID3 rep ID4 2 sex c rep male 3 rep female 2 female rep male 2 item c a b c a c a b a df
  • 无法创建 Facebook 应用程序

    第一次尝试创建 Facebook 应用程序 浏览到https developers facebook com apps它有一个在创建链接之前注册的链接 您只需接受条款和条件即可 现在它说 创建一个应用程序来启动 但是没有按钮可以单击来创建应
  • 专门使用 Github actions 为 iOS 构建 swift 包

    我有 iOS 应用程序的 swift 包 它需要UIKit跑步 我不想使用 Github 操作构建这个包 这就是我的工作流程 name Swift on push branches main pull request branches ma
  • 如何在 MVC 3 中将 WebForms .ascx 显示为部分视图

    我正在构建一个新的 ASP NET MVC 3 应用程序 在此应用程序中 我想在我的新 MVC razor 应用程序中的覆盖层中显示旧的 WebForms 用户控件 ascx ascx cs 作为部分视图 我在网上找不到任何有关执行此操作的
  • 静态链接与动态链接

    在某些情况下 是否有任何令人信服的性能原因来选择静态链接而不是动态链接 反之亦然 我听过或读过以下内容 但我对这个主题的了解还不够 无法保证其真实性 1 静态链接和动态链接之间的运行时性能差异通常可以忽略不计 2 如果使用使用配置文件数据来
  • 为什么我的打印函数将 () 和 "" 与语句一起打印?

    这是我针对绝对初学者 Python 编程挑战的代码 food input What is your favorite entree dessert input What is your favorite dessert print nI a
  • 使用可变模板参数构建枚举

    我有一个相当简单的变体类 它支持一组预定义的类型 并提供一个枚举来指示哪些可用类型当前处于活动状态 像这样的事情 class variant enum class type integer real string etc type acti
  • Eclipse 2023-06 突然不再自动完成“sysout”

    虽然我认识到这个问题之前已经被问过 但我尝试了多个不同线程的解决方案 但到目前为止还没有解决方案 5 天前 当我使用 Eclipse 时 我没有任何问题 现在到今天我突然无法使用 ctrl space 自动完成 sysout 据我所知 Ec
  • 在 C 中将数组作为参数传递

    我 认为我 明白 如果数组是在编译时在堆栈上声明的 则只能检索数组的大小 使用 sizeof 例如 int my array 1 2 3 sizeof my array 3 一旦你开始使用指针 你就会失去这个长度信息 例如如果将 int 指
  • 如何在 Spring RestTemplate 中使用以 JSON 表示的查询参数?

    我需要使用 Spring RestTemplate 向具有表示为 JSON 的查询参数的 HTTP 端点发出请求 restTemplate getForObject apiRoot path object myObject Response